У меня возникла проблема с получением некоторых данных.
таблицы У меня есть (для целей тестирования):Поиск продуктов с несколькими критериями
продукты:
product_id | product_name ----------------------------- 1 | product 1 2 | product 2 3 | product 3
Атрибуты:
product_id | attribute_id | attribute_value ------------------------------------------------------- 1 | 1 | lorem 1 | 2 | ipsum 2 | 1 | lorem 2 | 2 | doler 3 | 1 | sit 3 | 2 | ipsum
Я хочу, чтобы найти продукты, которые имеют Lorem хранятся в attribute_id 1 И Ipsum хранится in attribute_id 2.
Если я использую этот запрос,
SELECT attributes.attribute_id, attributes.attribute_value, products.product_id FROM products Inner Join attributes ON products.product_id = attributes.product_id WHERE (attributes.attribute_id = 1 AND attributes.attribute_value = 'lorem') OR (attributes.attribute_id = 2 AND attributes.attribute_value = 'ipsum')
я получаю:
attribute_id | attribute_value | product_id ---------------------------------------------------------- 1 | lorem | 1 2 | ipsum | 1 1 | lorem | 2 2 | lorem | 3
Но я действительно хочу, чтобы получить этот результат:
attribute_id_1 | attribute_id_2 | attribute_value_1 | attribute_value_2 | product_id ---------------------------------------------------------- 1 | 2 | lorem | ipsum | 1
Или просто PRODUCT_ID 1 в результате.
Я могу заставить его работать со следующим запросом, но в процессе производства (с большим количеством данных и несколькими объединениями) это ПУТЬ для замедления.
SELECT products.product_id FROM products Inner Join attributes ON products.product_id = attributes.product_id WHERE attributes.attribute_value = 'ipsum' AND products.product_id IN ( SELECT products.product_id FROM products Inner Join attributes ON products.product_id = attributes.product_id WHERE attributes.attribute_value = 'lorem' )
Надеюсь, вы понимаете, что я пытаюсь сделать.
Может кто-нибудь, пожалуйста, помогите мне?
Спасибо!
Это может работать .. Если ответ Брайана не работает, я попробую это. Благодаря! – Johan
Нет проблем :) Удачи ... – pdbartlett
Ну, потому что моя производственная установка немного сложнее, чем мой пример, ваш ответ работает и является лучшим вариантом для меня. Еще раз спасибо. – Johan