【黄啊码】thinkphp sql wherein的排序问题|tp不能按whereIn排序?

举报
黄啊码 发表于 2022/06/28 23:42:59 2022/06/28
4.1k+ 0 0
【摘要】 很多时候我们使用wherein的时候是想按wherein里边的数组进行排序,但数据库查询的时候就会默认按照主键id进行升降序排序,在这里我们用以下方法: tp5.1之前是这么走: $ids = implode(',',[1,2.3.4.5]);        $exp = new Expres...

很多时候我们使用wherein的时候是想按wherein里边的数组进行排序,但数据库查询的时候就会默认按照主键id进行升降序排序,在这里我们用以下方法:

tp5.1之前是这么走:


      $ids = implode(',',[1,2.3.4.5]);
              $exp = new Expression('field(id,'.$ids.')');
              $datas = Db::name('think_user')
                  ->whereIn('id',$ids)
                  ->field('id,status')
                  ->order($exp)
                  ->select();
      dump($datas);
  
 

然而tp5.1.7之后的版本就会出现排序表达式错误:field(`id`...

解决方法:

在V5.1.7+版本开始,如果你需要在order方法中使用mysql函数的话,必须使用下面的方式:

1

2

3

4

5

Db::table('think_user')

->where('status', 1)

->orderRaw("field(id,'1','2','3')")

->limit(5)

->select();

哎,只能说都是坑!!!! 

文章来源: markwcm.blog.csdn.net,作者:黄啊码,版权归原作者所有,如需转载,请联系作者。

原文链接:markwcm.blog.csdn.net/article/details/121075949

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。