|
|
|
| Есть таблица товаров items с полями:
id, name, desc, art, color, image, assign, contents
Поле assign содержит id другого товара из той же самой таблицы.
Мне нужно одним запросом извлечь id, name, desc, art, color, image, contents
+ id,art ТОГО ТОВАРА, id которого записан в поле assign.
Другими словами я связываю товары в каталоге между собой, для каждого товара в поле assign я
записываю значение id товара с которым он связан.
Вопрос - как извлечь это одним запросом?
....спасибо..... | |
|
|
|
|
|
|
|
для: hammet
(16.04.2007 в 18:29)
| |
SELECT m.*, a.id AS aid, a.art AS aart
FROM items AS m LEFT JOIN items AS a ON m.assign = a.id
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.04.2007 в 18:35)
| | Дело в том что у меня в запросе присутствует WHERE и GROUP BY...
Как с ними быть?
Изначально было так:
SELECT * FROM `kc_items` WHERE category=$id GROUP BY `name`,`desc`,`art` | |
|
|
|
|
|
|
|
для: hammet
(16.04.2007 в 18:48)
| | SELECT * FROM `kc_items` WHERE category=$id GROUP BY `name`,`desc`,`art`
Так писать нельзя. Любой уважающий себя сервер Ваш запрос забракует.
Если Вы пришете GROUP BY, будьте любезны действительно написать группирующий запрос, где в списке селекта не бы ло бы никаких полей кроме текх, что в GROUP BY и агрегирующих функций (MAX, COUNT, SUM и т.п.) и был хотя бы один агрегат. Иначе непонятно, что именно Вы хотите извлечь. | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2007 в 18:56)
| | А что касается WHERE - ничто не мешает дописать в хвост:
| |
|
|
|
|
|
|
|
для: Trianon
(16.04.2007 в 18:56)
| | SELECT m.*, a.id AS aid, a.art AS aart
FROM `kc_items` AS m
LEFT JOIN `kc_items` AS a ON m.assign = a.id
WHERE m.cat_by_items=$id
GROUP BY m.name,m.desc,m.art
------------
Вот так работает.
Группировку по нескольким полям делаю, т.к. при записи в БД один товар может иметь например разные значения одного и того же поля. Приходится его дублировать, напр:
id name foo bar
----------------------
1 John 25 10
2 John 25 45
3 John 25 17
т.е. в этом примере группирую по полю bar
у меня же name,desc могут повторяться | |
|
|
|
|
|
|
|
для: hammet
(16.04.2007 в 19:03)
| | Для этого нужно делать не GROUP а DISTINCT .
Группирующие запросы применяются совсем с другими целями.
Таблицы же стоит разделять, нормализуя отношения, а не дублировать данные в куче строк. | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2007 в 19:14)
| | Спасибо за совет! | |
|
|
|