在 php mysql 中使用 "case ... when" 时返回数据为空时出错?



我有一个样本数据:

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

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'

您是否尝试为CASE提供ELSE子句?根据你的表,p.uid不存在,它应该是p.user_id,对吧?

此外,在这种情况下,您应该使用INNER JOIN,因为您只想检索那些users表中的id字段分别与pointsusermeta中的字段匹配的情况。这应该能正常工作:

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

最新更新