在php mysql中使用“case ... when”时错误返回数据为null?

时间:2013-08-02 03:33:18

标签: php mysql

我有一个示例数据:

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

您是否尝试过向CASE提供ELSE条款?根据您的表p.uid不存在,它应该是p.user_id,对吗?

此外,在这种情况下,您应该使用INNER JOIN,因为您只想检索 id表中的users字段与之匹配的情况 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 和{{1}}。这应该正常工作:

{{1}}