Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:返回具有特定首选项设置的唯一用户_Mysql_Sql - Fatal编程技术网

Mysql SQL:返回具有特定首选项设置的唯一用户

Mysql SQL:返回具有特定首选项设置的唯一用户,mysql,sql,Mysql,Sql,表: 前缀是首选项定义的关键,例如主语言、辅助语言等的首选项。pref values表可能有一行对应于tPrefs表中定义的每个首选项,也可能没有。有道理吗 这些值都存储在tPrefVals表中。该表中每个用户每个pref只有一行,而不是每个用户有多个pref只有一行 目标: 获取首选项20或21设置为“es”的用户列表 id, userid, prefid, value 1, 1, 20, es 2, 1, 224, false 3, 1, 2

表:

前缀是首选项定义的关键,例如主语言、辅助语言等的首选项。pref values表可能有一行对应于tPrefs表中定义的每个首选项,也可能没有。有道理吗

这些值都存储在tPrefVals表中。该表中每个用户每个pref只有一行,而不是每个用户有多个pref只有一行

目标: 获取首选项20或21设置为“es”的用户列表

id, userid, prefid, value
1,  1,      20,     es
2,  1,      224,    false
3,  1,      234,    true
4,  2,      220,    en
5,  2,      221,    es
6,  2,      234,    true

我的想法是左键联接pref values表两次,但使用WHERE将其限制为仅限于类型为20或21的pref。这很有效。然而,我不确定这是最好的方式来做这样的查询。。。您建议如何执行此查询?

我不确定您为什么要使用tUsers表。但这应该会给你我知道你在寻找的结果:

SELECT DISTINCT tUsers.userid FROM tUsers
LEFT JOIN tPrefVals AS pri_lang ON tUsers.userid = pri_lang.user_id
LEFT JOIN tPrefVals AS sec_lang ON tUsers.userid = sec_lang.user_id
WHERE
((pri_lang.prefid = '20' AND pri_lang.value = 'es') 
OR
(sec_lang.prefid = '21' AND sec_lang.value = 'es'))

我不知道你为什么要用tUsers表。但这应该会给你我知道你在寻找的结果:

SELECT DISTINCT tUsers.userid FROM tUsers
LEFT JOIN tPrefVals AS pri_lang ON tUsers.userid = pri_lang.user_id
LEFT JOIN tPrefVals AS sec_lang ON tUsers.userid = sec_lang.user_id
WHERE
((pri_lang.prefid = '20' AND pri_lang.value = 'es') 
OR
(sec_lang.prefid = '21' AND sec_lang.value = 'es'))

这比您的查询更有效

select distinct userid from tPrefVals
where value = 'es' and prefid in ('20', '21')

这比您的查询更有效

select distinct userid from tPrefVals
where value = 'es' and prefid in ('20', '21')

优先级值是否存储在多个表中?前缀是什么?这和他们的母语有关吗?嗨,安东尼,见上文。希望这更有意义。那么如果
前缀
是他们的首选语言?为什么一个是数字系统,另一个是iso代码?是否在多个表中存储了
pri_.lang.value
?前缀是什么?这和他们的母语有关吗?嗨,安东尼,见上文。希望这更有意义。那么如果
前缀
是他们的首选语言?为什么一个是数字系统,另一个是iso代码?谢谢,我知道它可能在某处使用了in值,但已经有一段时间了,我完全忘记了如何有效地使用它。谢谢,我知道它可能在某处使用了in值,但已经有一段时间了,我完全忘记了如何有效地使用它。