dshmvqnl98119 2013-07-31 07:34
浏览 65
已采纳

在php mysql中使用“CASE WHEN ... THEN”时,错误查询值为null?

I have 2 table

c_users(ID, name)
        1 | peter
        2 | micheal

c_user_meta(user_id, meta_key, meta_value)
               1   |  c_user_level |  0    
               1   |  last_login   |  2013-07-31 14:33:24
               2   |  c_user_level |  1    
               2   |  last_login   |  2013-07-30 14:33:24   

And query get user last login with c_user_level = 0

$sql = " SELECT u.* , 
          max(CASE WHEN m.meta_key = 'c_user_level' THEN m.meta_value END ) level, 
          max(CASE WHEN m.meta_key = 'last_login' THEN m.meta_value END ) last_login
         FROM c_users u
         LEFT JOIN c_usermeta AS m ON m.user_id = u.ID
         WHERE u.id >0
          AND (CASE WHEN m.meta_key = 'c_user_level' THEN m.meta_value END) = 0
          AND (CASE WHEN m.meta_key = 'last_login' THEN m.meta_value END) IS NOT NULL
         GROUP BY u.id ORDER BY last_login DESC"

And result:

ID  | name | level | last_login
1   | peter| NULL  | 2013-07-31 14:33:24

Error why level of user_id = 1 is NULL, how to fix it ?

  • 写回答

2条回答 默认 最新

  • duankeng9477 2013-07-31 07:47
    关注

    You probably need to skip your where condition:

    SELECT
      u.* , 
      max(CASE WHEN m.meta_key = 'c_user_level' THEN m.meta_value END ) level, 
      max(CASE WHEN m.meta_key = 'last_login' THEN m.meta_value END ) last_login
    FROM
      c_users u
      LEFT JOIN c_usermeta AS m ON m.user_id = u.ID
    WHERE u.id >0
    GROUP BY u.id
    ORDER BY last_login DESC
    

    or (depending on what you are after) use HAVING clause, to filter the aggregated value:

    SELECT
      u.* , 
      max(CASE WHEN m.meta_key = 'c_user_level' THEN m.meta_value END ) level, 
      max(CASE WHEN m.meta_key = 'last_login' THEN m.meta_value END ) last_login
    FROM
      c_users u
      LEFT JOIN c_usermeta AS m ON m.user_id = u.ID
    WHERE u.id >0
    GROUP BY u.id
    HAVING level=0 AND last_login IS NOT NULL
    ORDER BY last_login DESC
    

    Please see fiddle here.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集