MySQL присоединиться к основному вопросу - PullRequest
2 голосов
/ 01 апреля 2011

Я уверен, что это просто, но мой мозг просто не работает сегодня!

У меня есть таблица products, давайте просто предположим, что она содержит p_id, у меня есть другая таблица - сводная таблица -который ссылается между products и другой таблицей attributes, эта таблица products_to_attributes и содержит pta_aid (идентификатор атрибута) и pta_pid (идентификатор продукта)

Надеюсь, этот (неправильный) запрос покажетчто я хочу сделать лучше, чем могу объяснить:

SELECT `p_id` FROM `products` 
LEFT JOIN `products_to_attributes` ON (`pta_pid` = `p_id`)
WHERE ((`pta_aid` = '1' OR `pta_aid` = '2') AND(`pta_aid` = '3'))

Я хочу иметь возможность группировать атрибуты, где продукт должен иметь атрибут 1 или атрибут 2 И иметь атрибут 3.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Если я правильно понимаю ваши потребности, вам, скорее всего, нужно иметь два предложения EXISTS:

SELECT p_id FROM products PR
WHERE EXISTS (SELECT p_id FROM products_to_attributes WHERE (pta_aid = 1 OR pta_aid=2) AND pta_pid=PR.p_id )
AND EXISTS (SELECT p_id FROM products_to_attributes WHERE pta_aid = 3 AND pta_pid=PR.p_id)
0 голосов
/ 01 апреля 2011
SELECT p.`p_id` FROM `products` p
LEFT JOIN `products_to_attributes` pta ON (p.`p_id` = pta.`pta_pid`)

Назовите таблицы и укажите, какое поле из какой таблицы.Однако как поле может быть как 1, так и 3 подряд?в предложении where есть логическая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...