|
|
|
| Попытаюсь максимально просто объяснить:
Две таблицы:
CREATE TABLE `blog_message`(
`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
primary key(id),
`text` TEXT NOT NULL,
`time` INT UNSIGNED NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `blog_comment`(
`id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
primary key(id),
`id_message` SMALLINT UNSIGNED NOT NULL,
`name` CHAR(32) NOT NULL,
`time` INT UNSIGNED NOT NULL,
`text` TEXT NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
В id_message хранится id сообщения.
Теперь надо запрос:
взять 10 сообщений с первой таблицы, при этом соединить количество постов со второй таблицы, где blog_comment.id_message=blog_message.id
Я так понимаю с помощью join'а, но подскажите, как!:) | |
|
|
|
|
|
|
|
для: Akdmeh
(10.08.2010 в 18:35)
| | SELECT `blog_message`.`id`, `blog_message`.`time`, `blog_message`.`mark`, `blog_message`.`cut`, `blog_message`.`text` AS `part_text`, COUNT(`blog_comment`.`id_message`) as count FROM `blog_message` JOIN `blog_comment` ON `blog_message`.id=`blog_comment`.`id_message` ORDER BY blog_message.`time` DESC LIMIT 0, 10
но возвращает одну строку, а в ней count() возвращает количество всех сообщений.
А надо для конкретного.
Например:
id 1 count 5
id 2 count 7
id 4 count 11 | |
|
|
|
|
|
|
|
для: Akdmeh
(10.08.2010 в 18:50)
| | Вычисление количества комментариев по каждому сообщению делается
с помощью агрегатного группирующего запроса.
SELECT id_message, COUNT(*) FROM comments GROUP BY id_message
|
А добавление всех остальных необходимых полей - и вправду через JOIN - сложным запросом.
JOIN при этом соединяет с одной стороны таблицу messages , а с другой - выход запроса выше. | |
|
|
|
|
|
|
|
для: Trianon
(10.08.2010 в 20:27)
| | То как это будет выглядеть в виде запроса?
Ужас, всегда знание базы было слабым местом, дальше простых запросов мозгов не хватает( | |
|
|
|
|
|
|
|
для: Akdmeh
(10.08.2010 в 20:58)
| | Вам же уже почти написали, как делать.
SELECT bm.id, bm.time, bm.mark, bm.text, COUNT( bc.id_message ) count
FROM blog_comment bc
RIGHT JOIN blog_message bm ON bm.id = bc.id_message
GROUP BY bc.id_message
LIMIT 0 , 10
|
| |
|
|
|