|
|
|
| Есть необходимость группировать некоторые товары в серии. 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-запросом? Если да, то как?.. Или есть другие разумные решения организации подобной группировки товаров? | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.07.2008 в 14:16)
| | > лучше бы series_id IS NULL
А в чем преимущество? | |
|
|
|
|
|
|
|
для: Orc
(12.07.2008 в 16:06)
| | ну как-то честнее что ли.
Хотя. Если считать, что могут быть игры
а) входящие в серии
б) заведомые одиночки и
в) те, для которых неизвестно, будет ли серия или нет,
тогда 0 становится вполне себе явным значением. | |
|
|
|
|
|
|
|
для: Trianon
(12.07.2008 в 16:21)
| | Ясно, спасибо. | |
|
|
|