Простой вопрос с SELTCT, но что-то я тормажу.

Anton

Just Programmer
Простой вопрос с SELTCT, но что-то я тормажу.

Всем добрый день:)

У меня простейший SELECT, но что-то ятормажу и неполучаеться, помогите пожалуйсто. :)

Есть продукты, живущие в таблице goods, они разделены по разделам живущим в таблице rubrics. Так как продукт может относиться сразу к нескольким разделам то связ устанавливаем через ассоциатор goods_rubrics.

Мне надо выбрать товары котопрые относяться сразу к нескольким рубрикам с определнными ID например товар входящий в рубрики 29 и 2

Пишу запрос:
SELECT *
FROM
goods g,
goods_rubrics r
WHERE
g.good_id=r.good_id and
(r.rubric_id = '2' AND r.rubric_id = '29' )

Само сабой ничего не возвращае, хотя там есть такие продукты.
 

Demiurg

Guest
SELECT g.*
FROM
goods g,
goods_rubrics r
WHERE
g.good_id=r.good_id and
(r.rubric_id = '2' OR r.rubric_id = '29' )
group by g.id
 

Anton

Just Programmer
При таком варианте получаеться, что выберает товары которы относяться и к группе с id = 2 и товары относящиеся к группе с ID = 29 ... а надо выбрать товары которы входят в оба множества. ТОесть необходимо пересеение.
 

Demiurg

Guest
SELECT count(r.rubric_id) cnt , g.*
FROM
goods g,
goods_rubrics r
WHERE
g.good_id=r.good_id and
(r.rubric_id = '2' OR r.rubric_id = '29' )
group by g.id
having cnt = 2
 

Anton

Just Programmer
ЭЭ ... несовсем то получаеться:-(((

В сумме оба множества это 48 товаров в однойи 4 в другой групе, пересекаютсья они по 2 товарам.

Первая версия вывдит все 52 товара, вторая версия выводит 29.

А такой запрос вобще написать можно?? :))
 

Falc

Новичок
Anton
Страно что у тебя запрос Demiurg'а не работает, возможно у тебя нет уникальности на связке попробуй так:
SELECT count(DISTINCT r.rubric_id) cnt , g.*
FROM
goods g,
goods_rubrics r
WHERE
g.good_id=r.good_id and
(r.rubric_id = '2' OR r.rubric_id = '29' )
group by g.id
having cnt = 2
 

Alexandre

PHPПенсионер
думаю, что раз есть пересечение меожеств
то надо делать через вложенные запросы,
но я могу ошибаться

а это mySQL не поддерживает.
 

Falc

Новичок
Alexandre
Ну почему же, у меня подобный запрос работает.
 
Сверху