• 人民网驻阿尔及利亚记者报道集 2018-02-19
  • 党务问答:党组与党委有何区别? 2018-02-19
  • MINI车联网服务3月起升级至4G网络 增加新功能 2018-02-18
  • 以色列警方:已有足够的证据可以用于起诉以总理 2018-02-18
  • 冬奥会短节目第四 金博洋:伤病令我更强大 2018-02-18
  • 天津市北辰区委书记冯卫华:强化政治担当 把主体责任落实落细 2018-02-17
  • 正月初一客流继续回落 全国铁路预计发送旅客389万人次 2018-02-17
  • 送别余光中:诗人虽远行,乡愁永流传 2018-02-17
  • 集团原董事长违纪被查 人员伤亡事故频发 湖北宜化:去年亏损额超过公司市值 2018-02-17
  • 图片故事:“六个人”的火车站 2018-02-16
  • 【马来西亚房产】雅诗阁之星十年包租可续租! ——凤凰网房产马来西亚 2018-02-16
  • 大量顺差在中国,多数利润归美国 2018-02-16
  • 河北今年将削减煤炭消费500万吨 2018-02-16
  • 开创生态文明新时代 绘出美丽中国新图景 2018-02-15
  • 以色列警方:已有足够的证据可以用于起诉以总理 2018-02-15
  • 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 来获取其余字段信息