私は認めるよりも長くこの問題に取り組んできました。どんな助けでも大歓迎です!
私は返信付きの基本的なコメント システムに取り組んでいます (1 レベルに制限されています)。
私が使用しているモデルは、かなり自明です。
ご覧のように、
とが等しい ANDが null の場合commenterID
、それは「ステータスの更新」となり、メイン ページで取り上げられる必要があります。これは親です。userID
parentID
親がフロント ページに掲載されているすべての返信を含める必要があります (isMain true を返します)。
私の例では、ID 1 は親ステータスの更新で、ID 3,4 は ID 1 への返信です。
いくつかのデータをダンプすることで、私の問題を説明しやすくなります:
CREATE TABLE `wallPosts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentID` int(11) DEFAULT NULL,
`commenterID` varchar(255) NOT NULL,
`userID` varchar(255) DEFAULT NULL,
`post` text,
`tags` varchar(255) DEFAULT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--------------------------------------------------------
INSERT INTO `wallPosts` VALUES(1, NULL, '1', '1', 'This is a status update', NULL, '2013-07-23 08:34:28');
INSERT INTO `wallPosts` VALUES(3, 1, '1', '1', 'this is a reply to a status update', NULL, '2013-07-23 08:35:39');
INSERT INTO `wallPosts` VALUES(4, 1, '2', '1', 'this is a reply to the status update from another user', NULL, '2013-07-15 11:57:35');
INSERT INTO `wallPosts` VALUES(5, NULL, '1', '2', 'This is a post on a user\\''s wall, should not be displayed on main page', NULL, '2013-07-23 08:37:28');
INSERT INTO `wallPosts` VALUES(6, 5, '1', '2', 'this is a reply to a wall post, should not be displayed on main', NULL, '2013-07-23 08:37:44');
これは私が現在持っているものです:
これは私が欲しいものです:
これは私が使用しているクエリです:
SELECT
`p`.`id`,
`p`.`parentID`,
`p`.`commenterID`,
`p`.`userID`,
`p`.`post`,
case
when (`p`.`userID` = `p`.`commenterID` and `p`.`parentID` IS NULL)
then 'true'
else 'false'
end as isMain
FROM `wallPosts` `p`
LEFT JOIN `wallPosts` `c` ON `c`.`parentID` = `p`.`parentID` AND `c`.`id` > `p`.`id`
GROUP BY `p`.`id`, `p`.`parentID`
HAVING COUNT(`c`.`id`) < 10
これにより、返信の数が最新の 10 件に制限されます。
ご協力いただきありがとうございます!:)