php5如何排序查询数据库,ThinkPHP5使用SQL Server数据库Order排序的坑

之前发过一篇 TP5 连接 SQL Server 的文章

现在又遇到 order 排序的坑.

该说不说 SQL Server 是真的辣鸡.

简单说明一下需求:

现在有 abc 和 bcd 两张数据表

需要联查 abc 表中的 pid 等于 bcd 表中的 id

并且按照 abc 表中的 id 字段倒序排序

– 需求End –

正常 TP5 查询 MySQL 数据库 代码如下

$data = Db::name('abc')

->alias('a')

->join('bcd b','a.pid = b.id')

->field('a.*,b.id as bid')

->order('a.id','DESC')

->select();

是可以正常查询出数据的.

然后 TP5 查询 SQL Server 数据库这么写就会报错

9abfbd81eccd76c8ed62644d7d6bae76.png

那怎么办 改一下吧

因为之前单表查询的时候踩过坑:

$data = Db::name('abc')

->field('pid,time')

->order('id','DESC')

->select();

会报如下错误

947f98da55b36137e297c5cce8f1c551.png

当时的解决办法是在 field() 内加上 order() 排序需要的字段名

$data = Db::name('abc')

->field('id,pid,time')

->order('id','DESC')

->select();

就解决了.

然而这次, 我寻思着我已经 a.* 了不就是把 abc 表里的所有字段都查出来了吗?为什么还不让用?

既然还是报错, 那我就借鉴之前的填坑办法 在 field() 加上 order() 需要用到的字段名吧.

加上之后代码如下

$data = Db::name('abc')

->alias('a')

->join('bcd b','a.pid = b.id')

->field('a.*,a.id,b.id as bid')

->order('a.id','DESC')

->select();

结果还是报这个错误

9abfbd81eccd76c8ed62644d7d6bae76.png

??? 黑人问号.jpg

一顿操作后得到如下两种解决方法:

方法一:

给需要排序的字段在 field() 内起别名.

$data = Db::name('abc')

->alias('a')

->join('bcd b','a.pid = b.id')

->field('a.*,a.id as aid,b.id as bid')

->order('aid','DESC')

->select();

方法二:

直接调用 abc 表内的字段原名 不需要用 表别名.字段名 的格式

如需求中的需要按照 abc 表的 id 字段排序

不需要写成 order('a.id','DESC') , field() 中也不用给排序字段起别名了, 只需要如下这样写就好了.

$data = Db::name('abc')

->alias('a')

->join('bcd b','a.pid = b.id')

->field('a.*,b.id as bid')

->order('id','DESC')

->select();

最后, 必须再吐槽一句!SQL Server 是真的辣鸡!

— End.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值