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

Форум MySQL

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

 

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

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

тема: Частичная группировка
 
 автор: Orc   (12.07.2008 в 13:57)   письмо автору
 
 

Есть необходимость группировать некоторые товары в серии. Cтруктура таблицы с товарами такая:

CREATE TABLE `products` ( 
  `id` int(10) NOT NULL auto_increment, 
  `name` varchar(150) NOT NULL default '', 
  `series_id` int(10) NOT NULL default '0', 
  PRIMARY KEY  (`id`), 
) TYPE=MyISAM ;


Структура таблицы с сериями:

CREATE TABLE `series` ( 
  `id` int(10) NOT NULL auto_increment, 
  `ser_name` varchar(100) NOT NULL default ''
  PRIMARY KEY  (`id`), 
) TYPE=MyISAM ;


Товары, которые не входят в какие-то серии в "series_id" имеют значение "0", а остальные - идентификатор серии. Один и тот же товар не может быть в разных сериях.

Пример: в таблице "products" следующие записи: "Grand Theft Auto 1", "Grand Theft Auto 2", "Mortal Kombat", "Half-Life".
Таблица "series" имеет запись "Grand Theft Auto". Думаю, что интуитивно понятно, какие игры сгруппированы в одну серию. На выходе нужно получить:

• Grand Theft Auto
• Mortal Kombat
• Half-Life

Причём желательно, чтобы серии имели какое-то отличие от несруппированных товаров (какое-то поле с числом "1" или "0", например).

Возможно ли сделать подобную выборку одним SQL-запросом? Если да, то как?.. Или есть другие разумные решения организации подобной группировки товаров?

   
 
 автор: Trianon   (12.07.2008 в 14:16)   письмо автору
 
   для: Orc   (12.07.2008 в 13:57)
 

SELECT p.name, 0 AS flg
  FROM products p
   WHERE series_id  = 0 -- лучше бы series_id IS NULL
UNION ALL
SELECT s.ser_name AS name, series.id AS flg
   FROM series s JOIN products p0 ON s.id = p0.series_id

   
 
 автор: Orc   (12.07.2008 в 16:06)   письмо автору
 
   для: Trianon   (12.07.2008 в 14:16)
 

> лучше бы series_id IS NULL

А в чем преимущество?

   
 
 автор: Trianon   (12.07.2008 в 16:21)   письмо автору
 
   для: Orc   (12.07.2008 в 16:06)
 

ну как-то честнее что ли.

Хотя. Если считать, что могут быть игры
а) входящие в серии
б) заведомые одиночки и
в) те, для которых неизвестно, будет ли серия или нет,
тогда 0 становится вполне себе явным значением.

   
 
 автор: Orc   (12.07.2008 в 16:49)   письмо автору
 
   для: Trianon   (12.07.2008 в 16:21)
 

Ясно, спасибо.

   
Rambler's Top100
вверх

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