Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Группировка таблиц (Николай) 21/12/2007 - 19:15:53
      Re: Группировка таблиц (vi.k) 22/12/2007 - 12:27:10
      Re: вдогонку (vi.k) 22/12/2007 - 12:28:40

> Original message text:
> From: Николай - 21/12/2007 - 19:15:53
> Subject:Группировка таблиц
> -----------------
> Дано: есть три таблицы
>
> 1. posts:
> `id` smallint(8) unsigned NOT NULL auto_increment,
> `user_id` smallint(6) unsigned NOT NULL default '0',
> `content` varchar(255) character NOT NULL default '',
> PRIMARY KEY (`id`);
>
> 2. users:
> `id` smallint(6) unsigned NOT NULL auto_increment,
> `login` varchar(40) NOT NULL default '',
> PRIMARY KEY (`id`)
>
> 3. posts_rates:
> `post_id` tinyint(8) unsigned NOT NULL default '0',
> `user_id` tinyint(6) unsigned NOT NULL default '0',
> `rate` smallint(1) NOT NULL default '0',
> PRIMARY KEY (`post_id`,`user_id`)
>
> Вопрос: как одним (1) предложением вытащить содержание постов, имена пользователей и рейтинг поста? Учитывая, что в таблице рейтинга постов не существует записи для поста пока пользователи не голосуют за него?
>


From: vi.k - 22/12/2007 - 12:27:10
Subject:Группировка таблиц
-----------------
SELECT p.id, u.login, p.content, CAST( GROUP_CONCAT(pr.rate) AS CHAR) rates, AVG(pr.rate) avg_rate
FROM posts p
JOIN users u ON p.user_id=u.id
LEFT JOIN posts_rates pr ON pr.post_id=p.id
GROUP BY p.id
ORDER BY p.id;

Обратите внимание на LEFT JOIN

Заодно: не обольщайтесь применением smallint(8) и tinyint(8) и т.п.. Какое бы число вы не поставили в скобках, smallint - останется 16-битным, а tinyint - 8-битным. Значение в скобках сохранилось только для совместимости. Используйте int или bigint. 255 значений tinyint вам явно не хватит для идентификаторов.

Добавьте индексы в posts - по user_id, в users - по login.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32622



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |