1
CREATE TABLE `comments` (
  `comment_id` int(11) NOT NULL AUTO_INCREMENT,
  `comment_parent_id` int(11) NOT NULL DEFAULT '0',
  `user_id` int(11) NOT NULL DEFAULT '0',
  `comment_text` varchar(200) NOT NULL DEFAULT '',
  `comment_created` int(20) NOT NULL DEFAULT '0',
  `comment_updated` int(20) NOT NULL DEFAULT '0',
  `comment_replies_count` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`comment_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

各コメントには複数の返信を含めることができますが、返信に返信することはできません。したがって、誰かがコメントに返信すると、挿入された行の親 ID 列に返信したコメントの ID が含まれます。

すべてのコメントを取得したいのですが、コメントに返信がある場合は、最後の返信を取得したいと思います。

SELECT c1.* 
FROM comments c1 
WHERE comment_parent_id = '0' 
ORDER BY comment_created DESC;

So if c1.comment_replies_count > 0 I would like to... 

SELECT c2.* 
FROM comments c2 
WHERE comment_parent_id = c1.comment_id 
ORDER BY comment_created DESC Limit 1;

これは 1 つのクエリで達成できますか? または、コメントへの最後の返信を取得するために、php ループ ステートメント中にデータベースに別の呼び出しを行うのが最善ですか?

事前に感謝し、私はまだ学んでいるので、私の無知を許してください.

4

2 に答える 2

2

テーブルをそれ自体に結合できます。

SELECT c1.*, c2.*, MAX(c2.comment_id)
FROM comments c1 LEFT JOIN comments c2 ON c1.comment_id = c2.comment_parent_id
WHERE c1.comment_parent_id = '0' 
GROUP BY c1.comment_id
ORDER BY c1.comment_created DESC
于 2009-06-10T17:17:19.010 に答える
0

サブセレクトを試してください:

SELECT * FROM comments WHERE comment_parent_id in (
SELECT c1.comment_id 
FROM comments c1 
WHERE c1.comment_parent_id = '0' 
AND c1.comment_replies_count > 0
ORDER BY comment_created DESC)
ORDER BY comment_created DESC Limit 1;
于 2009-06-10T17:15:12.383 に答える