php mysql不存在,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)

标签:php,mysql,join

来源: https://codeday.me/bug/20191002/1842737.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值