Как сделать выборку из базы MySql значений попадающих под несколько параметров?

Подскажите, как сделать выборку из базы.
Есть две таблицы:
1. таблица товаров
id | title | price | date
1 | название1 | 100 | дата1
2 | название2 | 200 | дата2

2. таблица с параметрами товаров
id | param_id | value | goods_id
1 | 10 | значение1 | 1
2 | 11 | значение2 | 1
3 | 10 | значение1 | 2
4 | 11 | значение3 | 2

Можно ли сделать выборку товаров, одним запросом, попадающих под определенные условия - допустим стоимость товара больше 50 и у товара обязательно должны присутствовать параметры param_id = "10" со значением = "значение1" и param_id = "11" со значением = "значение2"

Делал так:
SELECT * FROM table_goods g INNER JOIN table_goods_params p ON g.id = p.goods_id WHERE g.price > '50' AND p.param_id IN (10,11) AND p.value IN ('значение1','значение2') GROUP BY g.id

Но при таком варианте в результат выборки попадает и второй товар (id = 2), хотя у него и есть параметр param_id = 11, но значение этого параметра = значение3, а нужно чтобы присутствовали все указанные param_id и value.
  • Вопрос задан
  • 2394 просмотра
Решения вопроса 1
Вам нужно делать несколько джойнов (по количеству условий по параметрам):
SELECT g.* 
FROM table_goods g
    JOIN table_goods_params p1 ON p1.goods_id = g.id AND p1.param_id = 10 AND p1.value = "значение1"
    JOIN table_goods_params p2 ON p2.goods_id = g.id AND p2.param_id = 11 AND p2.value = "значение2"
WHERE g.price > '50'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@akulyk
Доброго времени суток. Можно-ли как-то оптимизировать данное решение? При большом количестве записей время выполнения запроса превышает 10 секунд

Спасибо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы