Помогите сделать запрос

pautinaweb

Новичок
Прошу совета
Есть запрос на выборку из базы (сортировка товара:
PHP:
SELECT * FROM cm_goods g LEFT JOIN cm_store s ON g.store_id = s.store_id WHERE g.if_show = 1 AND g.closed = 0
Тут все в порядке, товары выводит как надо, но мне понадобилось делать выборку ещё из одной таблицы:
PHP:
SELECT * FROM cm_goods g LEFT JOIN cm_store s ON g.store_id = s.store_id LEFT JOIN cm_goods_spec gs ON gs.goods_id = g.goods_id WHERE g.if_show = 1 AND g.closed = 0
То есть прибавляю к этим двум таблицам cm_goods_spec gs и товара уже выводится больше чем нужно, но не могу ни как понять как составить запрос чтобы всё заработало.
Я так понимаю что нужно как то сделать вложенный запрос но у меня не получается, помогите советом
 

WMix

герр M:)ller
Партнер клуба
могу предположить, что на 1 cm_goods приходится несколько записей cm_goods_spec, и тут вопрос, а как бы ты хотел увидеть ответ, учитывая что это конечно же таблица
 

pautinaweb

Новичок
Да верно на 1 cm_goods приходится несколько записей cm_goods_spec
таблица cm_goods (отвечает за товары) а cm_goods_spec за (атрибуты а именно размер и цвет)
Я так понимаю нужно сначало вытащить id товаров (goods_id) но а потом уже вытаскивать данные из таблиц cm_goods и cm_store
Но что то не получается у меня
 

WMix

герр M:)ller
Партнер клуба
дело то не во внутреннем запросе, ...
даже запрос с sub запросом вернет табличку... и опять мой вопрос актуален
а как бы ты хотел увидеть ответ?
 

pautinaweb

Новичок
Хотел бы увидеть ответ так:
PHP:
 $product_query = "SELECT * FROM cm_goods g LEFT JOIN cm_store s ON g.store_id = s.store_id WHERE g.goods_id IN (SELECT gs.goods_id FROM cm_goods_spec gs WHERE gs.spec_2 = 'S')
  ";
Но дело в том что размера S (как и любого другого ) может и не быть от того не выведется ни чего
 

WMix

герр M:)ller
Партнер клуба
возможно так
PHP:
SELECT * FROM cm_goods g 
LEFT JOIN cm_store s ON g.store_id = s.store_id 
LEFT JOIN cm_goods_spec gs ON gs.goods_id = g.goods_id AND gs.spec_2 = 'S'
очень сложно понять что ты хочешь... я могу рассказать что нужно сказать базе, но нужно понять что ты хочешь
 

pautinaweb

Новичок
Попробую объяснить понятнее есть движек ECMALL в нем есть сортировка товаров (например тут_http://ecmall.chinascript.ru/index.php?app=search&cate_id=21) есть сортировка по брендам категориям городам и цене а я хочу сделать еще по размерам и цвету, так я подключаю таблицу cm_goods_spec где хранятся размеры и цвета к каждому товару (понятно что у одного товара может несколько цветов и размеров ) Так вот когда я подключаю cm_goods_spec таблицу то у меня становится больше товаров что мне совершенно не нужно
И я хочу как то составить запрос что бы и по размерам сортировать можно было и товары отображались правильно
 

WMix

герр M:)ller
Партнер клуба
(допустим у тебя только один вид товара, ботинки puma) ты сортируешь по размеру
то я понимаю что ты увидишь по возрастанию/убыванию одни и теже ботинки
puma S
puma L
puma XL
...
или как по твоему?
 

pautinaweb

Новичок
Да именно так и вижу и хотелось бы как то составить запрос чтобы от этого избавится, но знаний не хватает
 

WMix

герр M:)ller
Партнер клуба
вот сейчас не понимаю, это же правильно, это же разные ботинки, разного размера... как можно иначе то сделать? ты хочешь только S оставить или что ты хочешь?
 

pautinaweb

Новичок
Например у меня есть 100 ботинок Рuma и все они разного размера и цвета и покупателю нужно выбрать себе ботинки нужного его размера
Он нажимает фильтр Пума и например выбирает свой размер и ему выдаются ботинки именно его размера и данного бренда
 

WMix

герр M:)ller
Партнер клуба
Но дело в том что размера S (как и любого другого ) может и не быть от того не выведется ни чего
теперь коментируем это
PHP:
SELECT * FROM cm_goods g 
LEFT JOIN cm_store s ON g.store_id = s.store_id 
LEFT JOIN cm_goods_spec gs ON gs.goods_id = g.goods_id 
WHERE gs.spec_2 = 'S'
 

pautinaweb

Новичок
теперь коментируем это
PHP:
SELECT * FROM cm_goods g 
LEFT JOIN cm_store s ON g.store_id = s.store_id 
LEFT JOIN cm_goods_spec gs ON gs.goods_id = g.goods_id 
WHERE gs.spec_2 = 'S'
Согласен тут я ступил, да и честно говоря поздно уже и голова не варит совсем уже думаю надо ложится спать и завтра опять ломать голову, вам спасибо
 

Марсель

Новичок
У маня аналогичный вопрос.Есть две таблицы:
1. Товары
id товара | наименование товара | и т.д.

2.Наличие размеров по каждому товару
id товара | S | M | L | и т.д.

Тип столбцов S,M,L... ENUM('yes','no') т.е. есть такой размер для данного товара или нет.
Необходимо с делать запрос который бы выбирал все товары из таблицы 1 для которых в таблице 2 например поле S='yes'
Никак не могу сообразить как это сделать...
 

Марсель

Новичок
Сделал так:
SELECT product.* FROM product JOIN size WHERE product.product_id=size.product_id AND size.s='yes'
Вроде правильно работает
 
Сверху