挑战:MySQL用户表默认设置

时间:2012-07-06 17:00:08

标签: mysql default

更新:

我已经意识到我这样做的方式不是最理想的,而且可能永远不会正常工作,现在我正在使用两个表而不是三个表,这似乎有效。

如果您有解决方案,欢迎您回答,但只有在遇到类似问题时才能帮助他人。


我有一个带有uid,名称和基本信息的用户表。我有一个带有sid的设置表,设置的名称和设置的默认值。

我还有一个带有sid,uid和value的users_settings表,将用户的设置链接到设置的名称和用户的名称。

在一个查询中,我如何选择一个用户,并在设置表中“循环”,在users_settings中选择用户的设置(如果存在),或者如果没有,则为每个设置选择该设置的默认值?

最好每个设置都会在结果集中显示为一列(列的名称是设置的名称,值是设置的值)。

如果无法理解,这是一个例子:

用户表:

uid name   email
1   Maria  maria@example.com
4   George george@example.com

设置表:

sid name     default_value
1   uicolour #f00
2   language en

users_settings表:

uid sid value
4   1   #000
1   2   es

针对uid 4的MySQL查询所需的结果:

uid name   email              setting_colour setting_language
4   George george@example.com #000           en

针对uid 1的MySQL查询所需的结果:

uid name   email             setting_colour setting_language
1   Maria  maria@example.com #f00           es

1 个答案:

答案 0 :(得分:0)

好的,在了解了它之后,并了解了有关左连接的更多信息,这似乎有效:

SELECT t_users.*, t_users_settings.*, t_settings.*
FROM t_users 
LEFT JOIN t_users_settings ON t_users.uid = t_users_settings.t_uid  
LEFT JOIN t_settings ON t_settings.t_sid != t_users_settings.t_sid
WHERE t_users_settings.t_sid IS NOT NULL 
AND t_users_settings.t_uid IS NOT NULL 
AND t_users.uid = '<input user id here>';