2012-04-27 65 views
0
$rget_comments = mysql_query("SELECT DISTINCT comment.id, comment.comment_name, comment.comment_body FROM rs_comments AS comment WHERE comment.comment_parent ='0' ORDER BY comment.id ASC"); 
while($get_comment = mysql_fetch_array($rget_comments)) 
{ 

    echo '+ <a href="comment.php?id=' . $get_comment['id'] . '">' . $get_comment['comment_name'] . '</a><br />'; 
    echo $get_comment['body'] . '<br />'; 

    $rget_comments = mysql_query("SELECT DISTINCT 
    (sub_comment.id) AS sub_id, (sub_comment.comment_name) AS sub_comment_name, (sub_comment.comment_body) AS sub_comment_body 
    FROM rs_comments AS sub_comment WHERE sub_comment ON sub_comment.comment_parent = '1'"); 
    while($get_comment = mysql_fetch_array($rget_comments)) 
    { 

     echo '- <a href="comment.php?id=' . $get_comment['sub_id'] . '">' . $get_comment['sub_comment_name'] . '</a><br />'; 
     echo $get_comment['sub_body'] . '<br />'; 
    } 

} 

我的表信息:如何在一个查询中使用这两个选择查询

CREATE TABLE IF NOT EXISTS `rs_comments` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `comment_type` varchar(255) NOT NULL, 
    `comment_post_ID` int(11) NOT NULL, 
    `comment_parent` int(11) NOT NULL, 
    `comment_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `comment_body` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 

INSERT INTO `rs_comments` (`id`, `comment_type`, `comment_post_ID`, `comment_parent`, `comment_name`,`comment_body`) VALUES 
(1, 'post', 1, 0, 'test comment', 'test comment body'), 
(2, 'post', 1, 0, 'test comment 2', 'test comment 2 body'), 
(3, 'post', 1, 1, 'sub comment 1', 'sub comment 1 body'), 
(4, 'post', 1, 1, 'sub comment 2', 'sub comment 2 body'); 

我有一个查询,但只会返回第一行:

$rget_comments = mysql_query(" 
    SELECT DISTINCT 
    comment.id, comment.comment_name, comment.comment_body, (sub_comment.id) AS sub_id, (sub_comment.comment_name) AS sub_comment_name, (sub_comment.comment_body) AS sub_comment_body 
    FROM rs_comments AS comment 
    LEFT OUTER JOIN rs_comments AS sub_comment ON sub_comment.comment_parent = comment.id 
    WHERE comment.comment_parent ='0' 
    GROUP BY comment.id 
    ORDER BY comment.id ASC"); 
    while($get_comment = mysql_fetch_array($rget_comments)) 
    { 
     echo '+ <a href="comment.php?id=' . $get_comment['id'] . '">' . $get_comment['comment_name'] . '</a><br />'; 
     echo $get_comment['body'] . '<br />'; 

     echo '- <a href="comment.php?id=' . $get_comment['sub_id'] . '">' . $get_comment['sub_comment_name'] . '</a><br />'; 
     echo $get_comment['sub_body'] . '<br />'; 
    } 

结果:

+test comment 
test comment 1 body 
-sub comment 1 
sub comment 1 body 
+test comment 2 
test comment 2 body 

预期结果:

+test comment 
test comment 1 body 
-sub comment 1 
sub comment 1 body 
-sub comment 2 
sub comment 2 body 
+test comment 2 
test comment 2 body 
+0

你能说XSS? – PeeHaa 2012-04-27 20:03:45

+1

您的查询是返回两行,还是PHP只是没有回显它们两个。当我尝试这个代码时,两者都适用于我。 – GDP 2012-04-27 20:06:59

+1

对不起,我不是英语 好还不行我 结果应该如下: +测试评论 测试注释1分体 -sub评论1 子评论1体 -sub评论2 子注释2体 +测试注释2 测试注释2体 但是现在是这样的: +测试评论 测试注释1分体 -sub评论1 子评论1体 +测试注释2 测试注释2体 – S6Stable 2012-04-27 20:17:47

回答

1

GROUP BY comment.id导致此问题。 GROUP BY将具有相同id和不同sub_id的两条记录分组到一条记录。像这样删除它:

SQL:

SELECT DISTINCT 
    comment.id, comment.comment_name, comment.comment_body, (sub_comment.id) AS sub_id, (sub_comment.comment_name) AS sub_comment_name, (sub_comment.comment_body) AS sub_comment_body 
    FROM rs_comments AS comment 
     LEFT OUTER JOIN rs_comments AS sub_comment ON sub_comment.comment_parent = comment.id 
    WHERE comment.comment_parent ='0' 
    ORDER BY comment.id ASC 

PHP:

$flag = array(); 
while($get_comment = mysql_fetch_array($rget_comments)) { 
    if(!isset($flag[$get_comment['id']])) { 
     echo '+ <a href="comment.php?id=' . $get_comment['id'] . '">' . $get_comment['comment_name'] . '</a><br />'; 
     echo $get_comment['body'] . '<br />'; 
     $flag[$get_comment['id']] = true; 
    } 
    if($get_comment['sub_id']) { 
     echo '- <a href="comment.php?id=' . $get_comment['sub_id'] . '">' . $get_comment['sub_comment_name'] . '</a><br />'; 
     echo $get_comment['sub_body'] . '<br />'; 
    } 
} 
+0

个谢谢,曾任职 但是,这将导致: +测试评论 测试注释1体 -sub评论1 子评论1体 +测试评论 测试注释1分体 -sub评论2 子注释2体 +测试评论2 测试评论2身体 – S6Stable 2012-04-27 21:33:03

+0

真的吗?我只是制作桌子并在本地确认,它就可以。请确认查询是否在您的实际代码的每个位置更新 – tosin 2012-04-27 21:40:18

+0

对不起,我英文不好,但是有效,但是对于每个子评论,主要评论重复 – S6Stable 2012-04-27 21:53:27