Laravel find in set排序

Laravel find in set排序

做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列。
例如,用户状态有四种:

0=>未激活;1=>正常;2=>禁用;3=>软删除

现在的需求是,我要按照:正常->未激活->禁用->删除;这个顺序来进行排序,同时按照注册时间降序,网上查了很多资料,国内提到这个的很少,在stackOverFlow上找到了答案!
先上解决方案:

public function index($customer_type = null) {
    $search = request('search');
    $perPage = request('perPage') ? request('perPage') : 10;
    $customer_type = $customer_type ? $customer_type : request('customer_type');
    // \DB::enableQueryLog();
    $data = Customer::select(['id', 'email', 'user_name', 'nick_name', 'status', 'phone', 'create_time'])
        ->where('customer_type', '=', $customer_type)
        ->where(function ($query) use ($search) {
            if ($search) {
                $query->where('user_name', 'like binary', '%' . $search . '%')
                    ->orWhere('nick_name', 'like binary', '%' . $search . '%')
                    ->orWhere('phone', 'like binary', '%' . $search . '%')
                    ->orWhere('email', 'like binary', '%' . $search . '%');
            }
        })
        ->orderByRaw("FIELD(status, " . implode(", ", [1, 2, 0, 3, 4]) . ")")
        ->orderBy('create_time', 'desc')
        ->paginate($perPage);
    // $query = \DB::getQueryLog();
    // dd($data);
    //追加额外参数,例如搜索条件
    $appendData = $data->appends(array(
        'search' => $search,
        'perPage' => $perPage,
    ));
    return view('admin/customer/customerList', compact('data'));
}

  打印出来的sql语句如下:

Laravel find in set排序

参考了以下链接:
https://stackoverflow.com/questions/42068986/laravel-weird-behavior-orderbyrawfield

https://stackoverflow.com/questions/34244455/how-to-use-not-find-in-set-in-laravel-5-1

https://stackoverflow.com/questions/35594450/find-in-set-in-laravel-example/35594503

find_in_set 复杂应用:

public function get_teacher_list($timeType, $name, $perPage = 10, $personality = 0, $teachingStyle = 0, $ageType = 0)
{
    // \DB::enableQueryLog();
    $result_data = DB::table('teacher_info as ti')
        ->select('ti.*')
        ->join('customer', 'customer.id', '=', 'ti.customer_id')
        ->where(function ($query) use ($personality) {
            if (trim($personality)) {
                $query->whereRaw("find_in_set($personality,ti.label_ids)");
            }
        })
        ->where(function ($query) use ($teachingStyle) {
            if (trim($teachingStyle)) {
                $query->whereRaw("find_in_set($teachingStyle,ti.label_ids)");
            }
        })
        ->where(function ($query) use ($ageType) {
            if (trim($ageType)) {
                $ageType = explode('-', $ageType);
                $query->whereRaw("DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 between $ageType[0] and $ageType[1]");
            }
        })
        ->where(function ($query) use ($timeType) {
            //1本周,2下周
            if ($timeType == 1) {
                $query->where('ti.can_appointment_1', 1);
            } elseif ($timeType == 2) {
                $query->where('ti.can_appointment_2', 1);
            } else {
                $query->where('ti.can_appointment_1', '>', 0)
                    ->orWhere('ti.can_appointment_2', '>', 0);
            }
        })
        ->where(function ($query) use ($name) {
            if (trim($name)) {
                $query->where('ti.chinese_name', 'like', '%' . $name . '%')
                    ->orWhere('ti.english_name', 'like', '%' . $name . '%');
            }
        })
        ->where('ti.status', 1)
        ->orderBy('ti.total_teach_num', 'desc')
        ->orderBy('ti.total_star_num', 'desc')
        ->orderBy('ti.satisfaction', 'desc')
        ->orderBy('ti.comment_num', 'desc')
        ->orderBy('ti.english_name', 'asc')
        ->paginate($perPage);
    // dd($result_data, \DB::getQueryLog());

    return $result_data;
}

  专门拿出来看一下:

$ids = array(1,17,2);

$ids_ordered = implode(',', $ids);

$items = User::whereIn('id', $ids)
 ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
 ->get();

  转载:https://blog.csdn.net/zhezhebie/article/details/78357354

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112320.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月9日 下午10:00
下一篇 2021年11月9日 下午11:00


相关推荐

  • eigen库教程_mkl库

    eigen库教程_mkl库1.Matrix类:定义:Matrix<类型,行,列>eigen库中封装好了一些常用的矩阵,例如:typedefMatrix<float,4,4>Matrix4f;当然我们也可以自己设置,矩阵的行和列可以设置为固定的值也可以设置动态的(Dynamic),小的尺寸用固定的,大的尺寸用动态的,使用固定尺寸可以避免动态内存的开辟。1)初始化…

    2022年10月18日
    6
  • 运行Linux下APAP程序

    运行Linux下APAP程序1.安装OpenCV2.解压AsProjectiveAsPossible-master.zip unzipAsProjectiveAsPossible-master.zip3.安装所需包1)Eigen参考链接:http://blog.csdn.net/ttomchy/article/details/56859841//2)配置第三方头文件2)glew3

    2025年12月3日
    5
  • 搭建SIP服务器

    搭建SIP服务器在我的上一篇文章中已经介绍如何通过 SIP 软电话直接通话 但是如果需要支持更多用户互相通话 同时基于安全考虑 需要对用户帐户登录进行验证控制 这些情况下就需要建立 SIP 服务器 SIP 服务器的作用 nbsp nbsp nbsp nbsp nbsp nbsp 呼叫控制和处理功能 业务提供 支持功能 用户管理功能 协议处理功能 路由处理 接入认证 计费信息采集 操作维护 网管功能 互通功能 安全功能 可选 黑白名单功能 拥塞控制功能 可

    2026年3月18日
    2
  • 安装netbeans步骤

    安装netbeans步骤netbeans 的安装步骤首先 我们要从官网上下载我们需要的 netbeans 安装包下载地址 https netbeans org 下载 NetBeansIDE 进入页面之后 根据你的需求下载我这里选的是 ALL 的下载包 但这里只是安装包较大而已 安装时是可以自定义安装的打开安装包 进入安装页面点击定制 进入自定义安装或者直接进行下一步安装勾选你要安装

    2026年3月10日
    3
  • win10专业版虚拟机配置服务器,win10专业版怎么运行虚拟机_win10专业版开启虚拟机的方法…

    win10专业版虚拟机配置服务器,win10专业版怎么运行虚拟机_win10专业版开启虚拟机的方法…虚拟机大家应该都很熟悉吧 就是允许你在当前操作系统中运行其他操作系统 虚拟操作系统会像你电脑上的另一个程序一样运行 有 win10 专业版系统用户想要运行虚拟机 可是却不知要怎么操作 其实系统中自带有虚拟机功能 我们只要将其开启就可以了 接下来给大家分享一下 win10 专业版开启虚拟机的方法 具体步骤如下 1 首先要找到控制面板 我们点开 windows 键 然后选择在所有应用中找到 Windows 系统

    2025年8月1日
    8
  • Nano Banana Pro白图及各种报错解决方法,api令牌渠道分组使用方式-T8 Comfyui教程

    Nano Banana Pro白图及各种报错解决方法,api令牌渠道分组使用方式-T8 Comfyui教程

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号