声明帮助(PHP)

时间:2012-03-28 21:44:25

标签: php

我的数据库包含问题和答案。问题具有ID(intQAID),并且响应具有ID(intResponseID)。 intRespondID与它响应的intQAID ID相同。每个数据库条目都有自己的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>";
}

但是我怎样才能让它在同一个声明中发布答案?

应该这样输出:

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

3 个答案:

答案 0 :(得分: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 :(得分:0)

尝试使用JOIN语句。只要你的问题和答案是一对一的,你就应该能够一举拉下所有东西。

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

答案 2 :(得分:0)

如果每个问题只有一个答案,那么你应该通过使用intRespondID和intQAI将问题表与answers表相结合来获取一个查询中的数据。

然后,通过while循环的每次旅行都有一个,无论你想要的第一行,a,a,你想要的第二行,最后是a。因此,通过循环的一次旅行不必只显示一行输出。