我的数据库包含问题和答案。问题有一个ID(intQAID),回答有一个标识(intResponseID)。intRespondID与它响应的intQAID相同。数据库中的每个条目都有自己的ID,即intPostID。
我想做的是编写一个查询,获取所有这些信息,并使用while语句将其发布到网站上。然而,结构需要是"问题",下面是答案,直到while循环结束。
我可以让问题发布:
$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>";
}
但是我怎样才能让它在同一个while语句中发布答案呢?
应该这样输出:
Question 1:
Answer 1:
Question 2:
Answer 2:
Question 3:
Answer 3:
etc....
在自身上加入表:
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
不过,我不知道你为什么要这样设计你的桌子。如果每个问题只能有一个答案,为什么不简单地在一行中有两列,一列包含问题,另一列包含答案?
尝试使用JOIN语句。只要你的问题和答案是一对一的,你就应该能够一蹴而就。
http://dev.mysql.com/doc/refman/5.0/en/join.html
如果每个问题只有一个答案,那么您应该通过使用intRespondID和intQAI将问题表与答案表连接起来,在一个查询中获得这两个问题的数据。
然后,通过while循环的每一次旅行都有一个,第一行上你想要什么,第二行上你想什么,最后是。因此,一次回路跳闸不必只显示一行输出。