MySQL SELECT с условием помощи - PullRequest
1 голос
/ 10 июня 2009
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

Каждый комментарий может иметь несколько ответов, однако на них нельзя отвечать. Поэтому, когда кто-то отвечает на комментарий, в строке, которую он вставляет, будет идентификатор комментария, на который он ответил, в столбце родительского идентификатора.

Я хотел бы получить все комментарии, и если на комментарий есть ответы, я хотел бы получить последний ответ.

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, чтобы получить последний ответ на комментарий?

Заранее спасибо и прошу прощения за мое невежество, поскольку я все еще учусь.

Ответы [ 2 ]

2 голосов
/ 10 июня 2009

Вы можете присоединиться к столу обратно на себя:

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
0 голосов
/ 10 июня 2009

Попробуйте дополнительный выбор:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...