2012-04-27 2 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 />'; 
    } 

} 

私のテーブル情報:はどのように私は1つのクエリでこれらの2つの選択クエリを使用します

$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 />'; 
    } 

結果:私は、クエリを得たが、最初の行だけが返されます

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'); 

+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

+1

あなたのクエリは両方の行を返すか、あるいはPHPが両方の行をエコーし​​ないだけです。このコードを試してみると、どちらも私の仕事です。 – GDP

+1

申し訳ありませんが、私は動作しません英語 で良いじゃない私 結果は次のようにする必要があります: +テストコメント テストコメント1体 -subコメント1 サブコメント1体 -subコメント2 サブコメント2体 +テストコメント2 テストコメント2体 しかし、今これです: +テストコメント テストコメント1体 -subコメント1 サブコメント1体 +テストコメント2 テストコメント2体 – S6Stable

答えて

1

GROUP BY comment.idがこの問題を引き起こす。 GROUP BYは、同じidと異なるsub_idを持つ2つのレコードを1つにグループ化します。このようにそれを削除します。

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

+0

本当ですか?私はテーブルを作ってそれをローカルで確認するだけです。あなたの実際のコードのすべての位置でクエリが更新されていることを確認してください – tosin

+0

申し訳ありませんが、私は英語で弱い、それは働いたが、すべてのサブコメントについては、メインのコメントを繰り返す – S6Stable

関連する問題