Multiselect и MySQL запрос

Я работаю в поисковике. У меня есть форма с множественным выбором, которая содержит языки, и в базе данных MySQL у меня есть одна таблица с именем USERS со всеми пользователями, зарегистрированными на веб-сайте, и одна таблица с именем USERS_LANGUAGES с языками, которые пользователи выбрали в своем профиле.

Итак, мне нужен запрос, чтобы получить пользователей, которые говорят на всех языках, выбранных в множественном выборе.

Мой первый вариант был:

SELECT u.id FROM users u INNER JOIN users_languages ul ON u.id=ul.id_user AND ul.id_language IN ($multiselect options separated by comma)

Но этот запрос показывает пользователей, которые знают некоторые из этих языков, а не ВСЕ из них.

Мой второй вариант - сделать цикл и добавить INNER JOIN для каждого языка, например так:

SELECT id FROM users u INNER JOIN users_languages ul_1 ON u.id=ul_1.id_user AND ul_1.id_language = 1 INNER JOIN user_languages ul_2 ON u.id=ul_2.id_user AND ul_2.id_language = 2 ...

этот запрос работает, но мне интересно, есть ли более простой запрос для этого.

1 ответ

Итак, для построения комментария @CBroes: (в качестве примера я использовал предложение IN)

SELECT u.id 
FROM users u 
INNER JOIN users_languages ul 
ON u.id=ul.id_user 
AND ul.id_language 
IN ("English", "Spanish", "French", "German")
HAVING COUNT(distinct ul.id_language) = 4

Итак, как вы сказали, если вы подходите:

("English", "Spanish", "French", "Arabic")

Т.е. арабский язык вместо немецкого, отличное число будет 3, а не 4, следовательно, оно не окажется в вашем наборе результатов. Таким образом, вы должны отправлять число в пункте подсчета каждый раз.

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