查询问题 - 尝试在讨论中对评论进行分组

时间:2010-12-16 04:20:11

标签: php mysql select

我花了最近几天与MYSQL查询问题搏斗。我希望有人能指出我正确的方向。

我正在查询两个表('问题'和'评论'),目的是返回以下布局:

问题1

  • 评论1
  • 评论2
  • 评论3

问题2

  • 评论4
  • 评论5

等等......

评论是一个问题所特有的(即在父母问题下存在评论)。

我的查询(我知道不正确)如下所示:

<?php
     $query = "SELECT discussion.*, comments.* FROM discussion LEFT JOIN comments ON discussion.referenceID = comments.commentID";
     $result = mysql_query($query) or die(mysql_error());
     while($row = mysql_fetch_array($result)){
     echo $row['question']. " - ". $row['comment']. "<br /><br />";
}
?>

结果:

问题1 - 评论1 问题1 - 评论3 问题2 - 评论2

我很接近,但在单个问题下无法实现多重评论。我试过'GROUP BY discussion.question',但这限制了我的结果:

问题1 - 评论1 问题2 - 评论2

要将其置于上下文中,我试图允许用户就单个页面上显示的多个问题提交评论。

提前致谢。

RR

3 个答案:

答案 0 :(得分:1)

试试这个:

$query = "SELECT * 
FROM discussion, comments
WHERE discussion.referenceID = comments.commentID
GROUP BY discussion.referenceID;

答案 1 :(得分:0)

只需存储上一个问题并将其与当前问题进行比较。

草图:

$prev_question = null;
while($row = mysql_fetch_array($result)) {
    if ($prev_question != $row['question']) {
        echo '<b>' . $row['question'] . '<b><br />';
        $prev_question = $row['question'];
    }
    echo $row['comment'] . '<br />';
}

答案 2 :(得分:0)

Zerkms,太棒了!谢谢你的回复。除了一个问题外,完美地运作。

只有在评论相关时才会出现问题(在某些时候我自己造成的问题)。无论是否分配了评论,目标都是显示所有评论。

工作代码:

<?php
$query = "SELECT discussion.*, comments.* FROM discussion LEFT JOIN comments ON discussion.referenceID = comments.commentID";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$prev_question = null;
while($row = mysql_fetch_array($result)) {
if ($prev_question != $row['question']) {
echo "<h3>" . $row['question'] . "</h3>";
$prev_question = $row['question'];
}
echo "<img src=\"images/bg_addform_topFull.gif\" width=\"446\" height=\"11\" /><div class=\"comment\"><h3>" . $row['author'] . "</h3><div class=\"greyText\">" . $row['dt'] . "</div><p>" . $row['comment'] . "</p></div><img src=\"images/bg_addform_bottom.gif\" width=\"446\" height=\"11\" class=\"footerImage\" />";
        }
        }
    ?>

再次感谢您的帮助。