GROUP BY和ORDER BY同时使用的问题

要在FastAdmin框架中执行分组搜索并获取每个组中最新的数据,并按照分组出现次数最多进行排序限制,可以结合使用模型类和原生SQL查询来实现

// 执行原生SQL查询
$result = YourModel::alias('t1')
    ->join("
        (SELECT creator_id, MAX(created_at) AS latest_created_at
        FROM your_table
        GROUP BY creator_id) t2",
        't1.creator_id = t2.creator_id AND t1.created_at = t2.latest_created_at'
    )
    ->select();

展示代码:

$takelist = Take::alias('t1')
            ->join("
        (SELECT admin_id, MAX(createtime) AS latest_createtime, COUNT(id) AS count
        FROM xilu_xiluhouse_user_take_log
        WHERE rental_id = $rental_id
        GROUP BY admin_id ORDER BY count DESC
        ) t2", 't1.admin_id = t2.admin_id AND t1.createtime = t2.latest_createtime'
            )->limit(5)->select();

解析:

1.根据admin_id进行分组 

GROUP BY admin_id

2.分组之后取最新时间的一条数据

MAX(createtime)

3.计算出每个分组的数量

COUNT(id) AS count

4.根据分组数量的大小进行排序

ORDER BY count DESC

5.取出分组展示的条数

limit(5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值