Задать вопрос

Как сделать выборку из базы 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 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 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 секунд

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

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

Похожие вопросы