2013-08-02 28 views
0

我有一個簡單的數據:在php mysql中使用「case ... when」時返回數據錯誤null?

users(id, name) 
     1 | peter 
     ... 
usermeta(user_id, meta_key, meta_value) 
      1 | level | 10 
      1 | display | pc 
      ... 
points(user_id, type, point) 
      1 | like | 5 
      2 | comment| 10  
      ... 

和MySQL:

SELECT u.*, 
(case when m.meta_key = 'level' then m.meta_value end) level , 
p.points AS point 
FROM users u 
LEFT JOIN points p ON p.user_id = u.id 
LEFT JOIN usermeta AS m ON m.user_id = u.id 

結果水平= NULL,如何解決呢?

id | name | level | point 
1 | peter| NULL | 5 
1 | peter| 10 | 10 

回答

1

m.meta_key = 'level'作爲連接條件。

SELECT u.*, 
m.meta_value AS level , 
p.points AS point 
FROM users u 
LEFT JOIN points p ON p.uid = u.id 
LEFT JOIN usermeta AS m ON m.user_id = u.id AND m.meta_key = 'level' 
1

您是否嘗試過爲您的CASE提供ELSE子句?並根據您的表p.uid不存在,它應該是p.user_id,對不對?

此外,你應該在這種情況下,要檢索,其中在usersid場分別的那些匹配pointsusermeta這種情況下使用INNER JOIN。這應該正常工作:

SELECT 
    u.*, 
    CASE WHEN m.meta_key = 'level' THEN m.meta_value ELSE NULL END AS level, 
    p.points AS point 
FROM users u 
INNER JOIN points p ON p.user_id = u.id 
INNER JOIN usermeta m ON m.user_id = u.id