@alx1987

Выбрать из базы MySQL значения, совпадающие со всеми параметрами?

Подскажите, как выбрать записи подпадающие под все параметры?

Есть таблица:
id, item_id, property_id, value_id
1, 1, 2, 3
2, 1, 2, 5
3, 1, 1, 4
4, 2, 2, 3
5, 2, 1, 4

Приходит массив такого вида: [ 2 => [ 3, 5 ], 1 => [ 4 ] ]
Ключи массива - это property_id, значения - это value_id
Из таблицы нужно выбрать все item_id у которых присутствуют ВСЕ property_id и value_id полученные из массива.
Т.е. при таком массиве из этой таблицы он должен выбрать только item_id = 1
  • Вопрос задан
  • 536 просмотров
Решения вопроса 1
svd71
@svd71
Если Хорошо посмотреть ответ Rsa97, то он должен вернуть запрос, но с дефектно построенным условием.
Также и для него хочу открыть еще и упрощенную форму джоинов
Select t1.itemid
from table as t1, table as t2, table as t3
where ....


будет идентичен его же запросу. Но ошибка в заданном условии: используемые проекци запросов t1, t2 и t3 логически никак не связаны (кроме того, что получаются из одного источника данных) и дающие в результате кортезиан. А из полученных для визуализации будут идентичны только первому условию для таблицы t1 без всяких прибамбасов с джоинами.

Думаю такой запрос для вас будет более корректен, за то так и не понял что и как и при каких условиях вы что то хотите получить
Select item_id from table
where (property_id =2 and value_id in (3,5)) or
(Property_id = 1 and value_id = 4)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `t1`.`item_id`
    FROM `table` AS `t1`
    JOIN `table` AS `t2` USING(`item_id`)
    JOIN `table` AS `t3` USING(`item_id`)
    WHERE `t1`.`property_id` = 2 AND `t1`.`value_id` = 3
        AND `t2`.`property_id` = 2 AND `t2`.`value_id` = 5
        AND `t3`.`property_id` = 1 AND `t3`.`value_id` = 4
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
27 нояб. 2024, в 19:08
1500 руб./в час
27 нояб. 2024, в 18:19
2000 руб./за проект
27 нояб. 2024, в 17:41
2000 руб./за проект