0

私は認めるよりも長くこの問題に取り組んできました。どんな助けでも大歓迎です!

私は返信付きの基本的なコメント システムに取り組んでいます (1 レベルに制限されています)。

私が使用しているモデルは、かなり自明です。

ご覧のように、

とが等しい ANDが null の場合commenterID、それは「ステータスの更新」となり、メイン ページで取り上げられる必要があります。これは親です。userIDparentID

親がフロント ページに掲載されているすべての返信を含める必要があります (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 件に制限されます。

ご協力いただきありがとうございます!:)

4

1 に答える 1