Multiselect和mysql查询

时间:2015-03-04 10:41:21

标签: php mysql database multi-select

我在搜索者工作。我有一个包含语言的多选表单,在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 个答案:

答案 0 :(得分:0)

所以建立@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,因此,它不会在结果集中结束。 所以你必须每次都在count子句中发送数字。