[英]mysql if row doesn't exist, grab default value
我正在為系統創建首選項模塊,以便用戶可以為某些部分(諸如布局,顏色方案,主屏幕等)定義自己的首選項。 表中的每個首選項都有一個默認值(以防用戶尚未定義一個默認值),並且一旦用戶更改了首選項,系統便應使用該用戶定義的值。
我在選擇所需的值時遇到了麻煩,我的查詢使用的是用戶定義的值,但是遺憾的是,當用戶尚未定義首選項時,它返回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
和首選項的name
),如果不存在,則必須返回默認值。
WHERE (user_id = 17 OR user_id IS NULL) AND name = "menu_items"
只是為了清理其余的查詢:
定義的首選項中的id
不需要存在,而是使用preference_id
和user_id
的組合鍵。
如果preferences
的id
名為preference_id
,則長ON
語句可以替換為USING(preference_id)
IF
函數可以替換為COALESCE(defined_value, default_value)
如果我在哪里,我會做一兩個查詢。
這樣您將獲得:
$query = "SELECT * FROM preferences_defined WHERE user_id = 17 AND name = 'menu_items'"
然后在PHP中:
$rows = mysql_num_rows($query);
if($rows == 0){
$query = "SELECT * FROM preferences WHERE name = 'menu_items'"}
這樣,您的正確查詢將始終位於$ query變量中。 希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.