• 中国新一代百亿亿次超级计算机“天河三号”原型机首次亮相[组图] 2018-08-17
  • “动静”结合丨带你感受不一样的实爆训练场 2018-08-17
  • 侠客岛:拿什么拯救你,不学普通话的香港年轻人 2018-08-17
  • 机构改革是一场政治考验 2018-08-17
  • 简讯:韩国前总统朴槿惠一审被判24年有期徒刑 2018-08-16
  • 人民网评:走向大洋,呼唤现代化的中国海军 2018-08-16
  • 北京成立学生申诉处理委员会-地方新闻-时政频道-中工网 2018-08-16
  • 虽胜不足喜!鲁能一隐忧不治愈,恐高开低走 2018-08-16
  • 小鱼儿戴胡可帽子似贵妇 临睡之前表白妈妈嘴超甜 2018-08-16
  • “北京8分钟”融入人工智能 通过互联网与国人互动 2018-08-16
  • 四部门调整完善新能源汽车推广应用财政补贴政策 2018-08-15
  • 两男子在吉大美食城“百元找零”诈骗? 2018-08-12
  • 突破!郑鹏创中国队冬残奥会个人项目最好成绩 2018-08-12
  • 今年铜陵市将治理水土流失面积36平方公里 2018-08-11
  • 篮球投注技巧 2018-08-11
  • Kevensuu's Blog

    mysql group_concat 用法

    需求:从一批数据中,按 live_id 分组取 id 最大的一个值,并按照 sort desc create_time 排序

    测试数据如下:

    可以看到有些 live_id 对应多条数据记录

    解决方法:

    $sql = "select 
            SUBSTRING_INDEX(group_concat(lpad(sort, 5, 0) order by id desc),',', 1) as sort,
            SUBSTRING_INDEX(group_concat(id order by id desc),',', 1) as id,
            SUBSTRING_INDEX(group_concat(create_time order by id desc),',', 1) as create_time
            from live_view where is_show=1 and status=0 group by live_id order by sort desc,create_time desc  limit {$limit},{$pagesize}";
            $ret = $this->fetchAllRows($sql);
            if(!$ret)
            {
                return array();
            }
    
            $ids = array();
            foreach ($ret as $value)
            {
                $ids[] = $value['id'];
            }
            $ids_str = implode(',', $ids);
    
            $sql = "select {$viewfields} from live_view
                    where id in({$ids_str}) order by sort DESC,create_time DESC ";
            $ret = $this->fetchAllRows($sql);
    

    从代码中看到,我们先通过 group_concat SUBSTRING_INDEX 两个函数获获取到想要的数据 ID,再根据这些 ID 来获取其余字段信息