微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – mysql如果行不存在,则获取默认值

我正在为一个系统制作一个偏好模块,这样用户就可以为某些部分定义自己的偏好(如布局,颜色方案,主屏幕等).表中的每个首选项都有一个认值(如果用户尚未定义一个),一旦用户更改了首选项,系统应该使用该用户定义的值.

我在选择所需的值时遇到问题,我的查询使用用户定义的值,但遗憾的是,当用户尚未定义首选项时,它返回null.

我有2张桌子

table **preferences**:
id
name
default_value

table **preferences_defined**:
id
preference_id
user_id
defined_value

我想创建一个函数,通过给出优先权所适用的人的user_id和首选项的名称,轻松选择所需的值.目前,我的查询如下所示:

SELECT IF(ISNULL(defined_value),default_value,defined_value) AS result
FROM preferences
LEFT JOIN preferences_defined ON preferences_defined.id = preferences.id
WHERE user_id = 17
AND name = "menu_items"

我猜WHERE user_id = 17部分是出错的地方,因为当没有定义的值可用时,这意味着也没有名为user_id的列.
我需要找到一种方法来完成这项工作.
因此,我需要选择定义的值(如果存在)(给定user_id和首选项的名称),如果不存在,则必须返回认值.

解决方法:

WHERE(user_id = 17 OR user_id IS NULL)AND name =“menu_items”

只是为了清理查询的其余部分:

定义的首选项中的id不需要存在,请使用preference_id和user_id的组合键.

如果首选项的id名为preference_id,则可以使用USING(preference_id)替换long ON语句

IF函数可以用COALESCE替换(defined_value,default_value)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐