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, следовательно, оно не окажется в вашем наборе результатов.
Таким образом, вы должны каждый раз отправлять число в пункте подсчета.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]