Запрос для получения строк по нескольким значениям

У меня есть таблица, например, так:

id_product id_feature_value 1 60 2 60 1 40 2 10

Я хочу получить разные id_products, где id_feature_value = 60 и id_feature_value = 40 Это просто пример, потому что мне понадобится фильтр по большему количеству feature_values.

SELECT DISTINCT id_products WHERE id_feature_value=60 AND id_feature_value=40. Но это не приведет к результату, потому что вы должны были сказать or, а не and. 😉
Luuk 11.12.2020 20:04

О скольких feature_valueценностях вы говорите?

Luuk 11.12.2020 20:07
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

либо используя отдельные и в :

select distinct id_products
from tablename
where id_feature_value IN ( 40, 60 , ...)

или сгруппировать по

select id_products
from tablename
where id_feature_value IN ( 40, 60 , ...)
group by id_products
Ответ принят как подходящий

Если вам нужны продукты, обладающие обеими функциями, вы можете использовать group by и having:

select id_product
from mytable
where id_feature_value in (40, 60)
group by id_product
having count(*) = 2

Это предполагает отсутствие дубликатов. В противном случае вам нужно count(distinct id_feature_value) = 2.

Вы можете легко расширить это, чтобы обрабатывать больше функций для каждого продукта: вам просто нужно расширить предложение in и соответствующим образом изменить буквальное число в предложении having.

Другие вопросы по теме