mysql 根据某一条件排序

文章描述了如何使用Laravel框架在MySQL数据库中,通过LEFTJOIN和WHERE子句筛选出最近一周内有违规聊天记录的家庭,然后按聊天条数进行降序排序,展示相关数据。
//例如 mysql 根据聊天条数排序
SELECT
	`a`.`id` AS `family_id`,
	`a`.`name`,
	`a`.`avatar`,
	`a`.`intro`,
	count(c.id) 
FROM
	`ln_family` AS `a`
	LEFT JOIN `ln_family_chat` AS `c` ON `a`.`id` = `c`.`family_id` and c.is_violation = 1
WHERE
	`status` = 1 
GROUP BY
	`a`.`id`

//is_violation 1 未违规 因为直接在where中加ln_family_chat的条件则会查不到数据 所以在表连接时加入条件


//laravel 写法
//获取最近一周的时间
$endTime = time();
$startTime = strtotime('-7 days',$endTime);
$this->famliyListStartTime = date('Y-m-d H:i:s',$startTime);
$this->famliyListEndTime = date('Y-m-d H:i:s',$endTime);

$where[] = ['a.status','=',1];
$list = DB::table('ln_family as a')
    ->leftJoin('ln_user_data as b', 'a.user_id', '=', 'b.user_id')
    ->leftJoin('ln_family_chat as c', function ($join) {
        $join->on('a.id', '=', 'c.family_id')
            ->where('c.is_violation', '=', 1)
            ->whereBetween('c.send_time', [ $this->famliyListStartTime, $this->famliyListEndTime]);
    })
    ->where($where)
    ->select([
        'a.id as family_id',
        'a.name as family_name',
        'a.avatar as family_avatar',
        'a.intro as family_intro',
        'a.user_id',
        'a.add_time',
        'b.nickname',
        'b.head_picture',
        DB::raw('count(c.id) heat')
    ])
    ->groupby('a.id')
    ->orderBy('heat','desc')
    ->orderBy('a.add_time','desc')
    ->paginate($pageSize, ['*'], '', $page);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科小洋Lmy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值