Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос с таблиц
 
 автор: Akdmeh   (10.08.2010 в 18:35)   письмо автору
 
 

Попытаюсь максимально просто объяснить:
Две таблицы:
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:50)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Trianon   (10.08.2010 в 20:27)   письмо автору
 
   для: Akdmeh   (10.08.2010 в 18:50)
 

Вычисление количества комментариев по каждому сообщению делается
с помощью агрегатного группирующего запроса.
SELECT id_message, COUNT(*) FROM comments GROUP BY id_message

А добавление всех остальных необходимых полей - и вправду через JOIN - сложным запросом.
JOIN при этом соединяет с одной стороны таблицу messages , а с другой - выход запроса выше.

  Ответить  
 
 автор: Akdmeh   (10.08.2010 в 20:58)   письмо автору
 
   для: Trianon   (10.08.2010 в 20:27)
 

То как это будет выглядеть в виде запроса?
Ужас, всегда знание базы было слабым местом, дальше простых запросов мозгов не хватает(

  Ответить  
 
 автор: Лена   (10.08.2010 в 23:45)   письмо автору
 
   для: 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования