2022年7月

在写Sql语句查询时,有时同时用到分组 GROUP BY 和排序 ORDER BY, 如

SELECT id,card_no,add_datetime FROM table WHERE 1 GROUP BY card_no ORDER BY add_datetime DESC 

查询结果只是返回分组后的第一条数据,而不是分组后组内时间最新的第一条数据

我的解决办法是使用 子查询+DISTINCT 查询,如下:

SELECT * FROM (SELECT DISTINCT id,card_no,add_datetime FROM table WHERE 1 ORDER BY add_datetime DESC) tmp GROUP BY card_no

具体原理未知,但是能查出所期望的结果

在使用 array_filter( array(), callback ) 函数时,一开始写成

public function ajaxGetApCardList(){
    $aApCards = array_filter($aData, 'filterApCard');
}
private function filterApCard($arr)
{
    return $arr['field_name'] == "AP卡";
}

结果就是返回了 NULL 值
正确写法应该是

public function ajaxGetApCardList(){
        $aApCards = array_filter($aData, [$this, 'filterApCard']);
    }
private function filterApCard($arr)
    {
        return $arr['field_name'] == "AP卡";
    }