2012-03-28 9 views
1

私のデータベースには、質問と回答の両方が含まれています。質問にはID(intQAID)があり、応答にはID(intResponseID)があります。 intRespondIDは、応答しているintQAID IDと同じです。データベースへの各エントリは独自のIDを持ちます。これはintPostIDです。Whileステートメントヘルプ(PHP)

私がしようとしていることは、この情報をすべて取得してwhileステートメントを使用してウェブサイトに投稿するクエリを書くことです。しかし、whileループが終了するまで、構造体はQuestionで答えの下にある必要があります。

$question = mysql_query("SELECT *, 
(SELECT cUsername FROM tblUsers tblU WHERE Q2.intPosterID = tblU.intUserID) AS username, 
(SELECT DATE_FORMAT(dPostDateTime, '%b %e %Y %H:%i')) AS post_time 
FROM tblQA Q2 WHERE intResponseID = 0 
ORDER BY Q2.dSortDateTime DESC, Q2.intQAID DESC LIMIT 40"); 

while($row = mysql_fetch_array($question)) 
{ 
echo "<tr class='forum'>"; 
echo "<td class='forum'>" . substr($row['cBody'], 0, 150) . "</td>"; 
echo "<td class='forum'>" . $row['cCategory'] . "</td>"; 
echo "<td class='forum'>" . $row['username'] . "</td>"; 
echo "<td class='forum'>" . $row['post_time'] . "</td>"; 
echo "</tr>"; 
} 

をしかし、私はそれは同じで声明ながら答えを投稿する方法を取得することができます。

私はポストに質問を受けることができますか?

そうのように出力する必要があります

Question 1: 
    Answer 1: 
Question 2: 
    Answer 2: 
Question 3: 
    Answer 3: 
etc.... 
+2

あなたの出力をエスケープしてください! –

+0

質問ごとに常に1つの回答ですか? –

+1

古代の 'mysql_ *'関数の使用をやめてください –

答えて

0

は、JOINステートメントを使用してみてください。あなたの質問と回答が1対1である限り、すべてを1つに絞ることができるはずです。

http://dev.mysql.com/doc/refman/5.0/en/join.html

+0

質問と回答は同じテーブルにあります。もう1つの表はユーザー情報です。 – BigMike

+0

あなたはテーブルを使って正しい軌道に乗っていました。 'echo 'のようなもの​​質問​​'です。 $行['質問']。 '';エコー '​​回答​​'です。 $行['答え']。 ''; 'はうまくいくはず –

1

自体にテーブルを結合:

SELECT 
*, 
(SELECT cUsername FROM tblUsers tblU WHERE Q2.intPosterID = tblU.intUserID) AS username, 
(SELECT DATE_FORMAT(dPostDateTime, '%b %e %Y %H:%i')) AS post_time 
FROM  tblQA Q2 
JOIN  tblQA AS tblQAjoin ON tblQAjoin.intRespondID = Q2.intPostID 
WHERE  Q2.intResponseID = 0 
ORDER BY Q2.dSortDateTime DESC, Q2.intQAID DESC 
LIMIT  40 

は、私はあなたがが、あなたのテーブルこの方法を設計したいと思う理由はわかりません。質問ごとに答えが1つしかない場合は、2つの列が連続して1つは質問に、もう1つが答えを持つのはなぜですか?

0

すべての質問に回答が1つしかない場合は、質問テーブルと回答テーブルをintRespondIDとintQAIを使って結合することで、両方のデータを取得する必要があります。

whileループを通過するたびに、最初の行に必要なものがあれば、a、a、2行目に必要なもの、最後にaが入ります。したがって、ループを1回通過するだけで、1行の出力を表示する必要はありません。

+0

すべての投稿は単一のテーブルにあります。だから私は参加する必要はありません。私はより特定の形式で質問と回答を書くためにwhileステートメントを書く方法にもっと興味があります。 – BigMike

+0

はい、あなたは参加する必要があります:参加は必ずしも2つのテーブルを含む操作である必要はありません。行(この場合は質問)を同じ表の別の行(この場合は回答)に結合することもできます。あなたがそれらを同じ行に入れれば、あなたはもちろん、参加する必要はありません。上記の私の答えを参照してください。 – Daan