1

stackoverflow の回答にコメントを投稿できるため、Web サイトの訪問者に既存のコメントにコメントを投稿する機能を提供したいと考えています。

ここでは、2 つのテーブルを作成しました

threads
    thread_id (auto increment),
    title VARCHAR(MAX),
    body VARCHAR(MAX),
    date datetime,
    user INT

comments
    comment_id INT (auto increment),
    parent_id INT,
    thread_id INT,
    title VARCHAR(MAX),
    body VARCHAR(MAX),
    date datetime,
    user INT

ユーザーがスレッドにコメントを投稿すると、以下のようにコメント テーブルに保存されます。

comment_id = 1211
parent_id = NULL
thread_id = 122
title = "This is the title of the comment"
body = "This is the Body of the comment"
date = 2013-04-04 13:05:44
user = "xyzuser"

ユーザーが上記のコメントにコメントを投稿すると、そのコメントは以下のようにコメント テーブルに保存されます。

comment_id = 1212
parent_id = 1211
thread_id = 122
title = "This is sample title of comment on comment"
body = "This is the Body of comment on comment";
date = 2013-04-04 15:05:44
user = "abcuser"

次のクエリを使用して、スレッド テーブルからスレッドを取得しています

SELECT * FROM threads WHERE thread_id = 122

今まで、以下のようにコメントテーブルからスレッドの下にコメントを取得しています

SELECT * FROM comments WHERE thread_id = 122

しかし、今、各コメントの下にコメントも表示したいので、次のことを試しました

SELECT * FROM comments WHERE thread_id = 122 GROUP BY parent_id

しかし、このクエリを使用すると、parent_id に NULL 値を持つ行はどうなるか、および各コメントの下のコメントをどのように整理するかを説明します。

誰でも解決策はありますか?? どのクエリを使用する必要があり、各コメントの下のコメントをどのように整理するのですか??

4

3 に答える 3

0
SELECT c.* FROM comments c
LEFT JOIN
  comments s
ON 
  s.parent_id = c.comment_id
WHERE c.thread_id = 122
GROUP BY c.comment_id
ORDER BY c.date ASC
于 2013-04-08T08:01:58.270 に答える
0

使用したクエリはSELECT * FROM comments WHERE thread_id = 122、コメントの下にコメントを既に取得しています。特定の順序でそれらを取得しようとしていますか? 次に、追加してみてくださいorder by parent_id。または、必要な順序を指定します。

クエリ結果をどのように表示するかを示す小さなレコード セットを作成することもできます。あなたがどうなりたいのか、私にはよくわからないからです。

于 2013-04-08T08:14:20.120 に答える
0

配列であろうとオブジェクトであろうと、コメントのSQL結果を取得する方法がわかりません。たとえば、配列の場合-

$comments = array(
    array('comment_id' => '1211',
        'parent_id'  => NULL,
        'thread_id'  => '122',
        'title'      => 'This is the title of the comment',
        'body'       => 'This is the Body of the comment',
        'date'       => '2013-04-04 13:05:44',
        'user'       => 'xyzuser'),
    array('comment_id' => '1212',
        'parent_id'  => '1211',
        'thread_id'  => '122',
        'title'      => 'This is the title of the comment',
        'body'       => 'This is the Body of the comment',
        'date'       => '2013-04-04 15:05:44',
        'user'       => 'abcuser'),
);

配列をソートします -

$childs = array();
foreach ($comments as &$comment) {
    $childs[$comment['parent_id']][] = &$comment;
}
unset($comment);

foreach ($comments as &$comment) {
    if (isset($childs[$comment['comment_id']])) {
        $comment['childs'] = $childs[$comment['comment_id']];
    }
}
unset($comments);

$tree = $childs[NULL];
echo "<pre>";
print_r($tree);

出力:

Array
(
    [0] => Array
        (
            [comment_id] => 1211
            [parent_id] => 
            [thread_id] => 122
            [title] => This is the title of the comment
            [body] => This is the Body of the comment
            [date] => 2013-04-04 13:05:44
            [user] => xyzuser
            [childs] => Array
                (
                    [0] => Array
                        (
                            [comment_id] => 1212
                            [parent_id] => 1211
                            [thread_id] => 122
                            [title] => This is the title of the comment
                            [body] => This is the Body of the comment
                            [date] => 2013-04-04 15:05:44
                            [user] => abcuser
                        )

                )

        )

)

オブジェクトにも同じロジックを適用して、結果を並べ替えて表示できます。

于 2013-04-08T08:36:43.397 に答える