为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用order by或latest对时间戳进行排序只能按日期排序而不是按时间排序?

为什么使用order by或latest对时间戳进行排序只能按日期排序而不是按时间排序?

PHP
慕田峪9158850 2024-01-19 16:57:38
我正在使用 Laravel。我将此行添加到控制器中$remarks = Remarks::where('document_id', $document->id)->orderBy('created_at', 'DESC)->get();或者$remarks = Remarks::where('document_id', $document->id)->latest('created_at')->get();我习惯于foreach获取每一条评论。这些是结果$remark->$description2019年11月10日 - 上午8:292019年10月10日 - 下午2:49 2019年10月10日 - 下午3:572020年9月13日 - 下午2:06 2020年9月13日 - 下午2:08它应该是2020年9月13日 - 下午2:082020年9月13日 - 下午2:062019年11月10日 - 上午8:29 2019年10月10日 - 下午3:572019年10月10日 - 下午2:49另外,即使当我将 ASC 或 DESC 更改orderBy为 ASC 或 DESC 时,它也不会影响视图中的任何内容,它总是显示此2019年11月10日 - 上午8:292019年10月10日 - 下午2:49 2019年10月10日 - 下午3:572020年9月13日 - 下午2:06 2020年9月13日 - 下午2:08
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

这里的问题是,您似乎正在存储文本时间戳,而且这些时间戳的格式不允许按它们排序以给出任何有意义的时间顺序。这里的一种解决方法是不对此进行排序:

Nov. 10, 2019 - 8:29 am

将此作为日期排序,使用STR_TO_DATE

STR_TO_DATE('Nov. 10, 2019 - 8:29 am', '%b. %d, %Y - %h:%i %p')

我们可以orderByRaw在 Laravel 中使用:

$remarks = Remarks::where('document_id', $document->id)
    ->orderByRaw("STR_TO_DATE(created_at, '%b. %d, %Y - %h:%i %p') DESC")
    ->get();

作为一些一般建议,您可能需要考虑在 MySQL 中将created_at列设置为datetime或 a timestamp。如果您这样做,那么降序排序将起作用,而不必求助于使用STR_TO_DATE.


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 26 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信