sql >> データベース >  >> RDS >> Mysql

コメントとコメント返信のmysql構造

    人々が返信に返信できるようにしたい場合(つまり、オンラインメッセージフォーラムに表示されるような返信の階層を設定したい場合)、オプションのparent_comment_idフィールドをコメントテーブルに追加します。

    >

    テーブルは次のようになります

    `CREATE TABLE IF NOT EXISTS `comments` (
      `id` int(12) NOT NULL AUTO_INCREMENT,
      `parent_comment_id` int(12) NULL,
      `comment` text,
      `user_id` int(12) DEFAULT NULL,
      `topic_id` int(12) NOT NULL,
      `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `user_id` (`user_id`),
      KEY `topic_id` (`topic_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;`
    

    すべてのコメントと返信を表示するクエリは、次のようになります。

    SELECT c.id, c.comment, r.comment as reply, c.user_id, u.username, u.photo
    FROM (comments c)
    JOIN users u ON c.user_id = u.id
    LEFT JOIN comments r ON c.id = r.parent_comment_id
    WHERE c.topic_id = 9
    

    ただし、このクエリを使用すると、返信は「返信」列だけでなく、「コメント」列にも、それぞれが0個以上の返信を持つ追加の行として表示されることに注意してください。

    コメントに返信したユーザーのユーザー名を表示するには、usersテーブルに2回参加する必要があります(最初は元のコメントを投稿したユーザー、もう1つは返信したユーザー)。このクエリを試して、返信したユーザーのユーザー名を表示してください:

    SELECT c.id, c.comment, c.user_id, u.username, u.photo, r.comment as reply, r.user_id as reply_user_id, 
    u2.username as reply_username, u2.photo as reply_photo
    FROM (comment c)
    JOIN users u ON c.user_id = u.id
    LEFT JOIN comments r ON c.id = r.parent_comment_id
    JOIN users u2 ON r.user_id = u2.id
    WHERE c.topic_id = 9
    


    1. PHPで2つのMySQLテーブルを結合する

    2. mysqliの最後の挿入ID

    3. where句の列'id'があいまいです

    4. MariaDBでのSLEEP()のしくみ