mysql if 截取,mysql如果行不存在,则获取默认值

I'm making a preferences module for a system so users can define their own preferences for certain parts (stuff like lay-out, color-scheme, homescreen etc.). Every preference in the table has got a default value (in case the user hasn't defined one yet) and once the user has changed their preferences the system should use that user-defined value.

I'm having trouble with selecting the desired value, my query works with the user-defined value, but sadly it returns null when the user hasn't defined a preference yet.

I have 2 tables

table **preferences**:

id

name

default_value

table **preferences_defined**:

id

preference_id

user_id

defined_value

I want to create a function to easily select the desired value by giving the user_id of the person to whom the preference applies and the name of the preference. At the moment my query looks like this:

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"

I guess the WHERE user_id = 17 part is where things go wrong because when there is no defined value available it means there also isn't a column named user_id.

I need to find a way to make this work.

So, I need to select the defined value if it exist (given the user_id and the name of the preference), if not, it will have to return the default value.

解决方案

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

And just to clean up the rest of the query:

The id in preferences defined doesn't need to be there, use a combined key of preference_id and user_id instead.

If the id of preferences was named preference_id, the long ON statement could be replaced with USING(preference_id)

The IF function can be replaced with COALESCE(defined_value, default_value)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值