2014-06-12 186 views
0

CASE語句之間我寫了一個查詢是如下 -使用,並在WHERE子句SQL查詢

SELECT user_id, display_name, user_email, meta_key, meta_value 
FROM wp_usermeta um INNER JOIN wp_users u ON um.user_id = u.id 
WHERE 
CASE 
WHEN meta_key = "renewal_date" THEN meta_value = "a" 
WHEN meta_key = "wp_user_level" THEN meta_value <> "10" 
END 

我需要兩個「when」語句的user_id相等。我的意思是,如果同一用戶(具有相同的user_id)具有meta_key作爲renewal_date和相應的meta_value作爲a,並且同一用戶具有meta_key作爲wp_user _level並且具有相應的meta_value作爲10,則他不應該顯示在結果列表中。由於我對SQL的知識有限,我正在考慮在WHEN語句之間使用AND,但它給了我一個語法錯誤。

+0

此SQL在當前狀態下爲您運行嗎? – TMNT2014

+0

你可以發表你嘗試使用'AND'語句嗎? – brazilianldsjaguar

回答

0

從您的描述中,我想我看到你正在嘗試做什麼,但是你的查詢不會像那樣工作。看起來您在wp_usermeta表中每個用戶標識都有幾行。這被稱爲EAV模型(實體屬性值),該模型使報告非常困難,因爲您的行應該是列。得到它的工作

一種方法是加入wp_usermeta表多次(所以行變成列本質),就像這樣:

SELECT u.id, u.display_name, u.user_email, 
    rd.meta_value AS renewal_date, ul.meta_value AS wp_user_level 
FROM wp_users u 
LEFT JOIN wp_usermeta rd ON rd.user_id=u.id AND rd.meta_key='renewal_date' 
LEFT JOIN wp_usermeta ul ON ul.user_id=u.id AND ul.meta_key='wp_user_level' 
WHERE rd.meta_value = 'a' 
AND ul.meta_value <> '10' 

請注意,誰沒有「wp_user_level」數據的用戶將被納入在這份報告中。如果你需要過濾那些,你可以用INNER JOIN替換LEFT JOIN。

+0

這對我有效。謝謝你抽出時間來幫助我,詹姆斯! – user3715910