You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL简单查询按日期排序失效问题求助

问题原因分析

你遇到的问题核心在于**fecha字段是字符串类型**,MySQL对字符串排序是按照字典序来比较的,而不是数值大小。

举个例子,字符串形式的时间戳"982428253"和"1525662000",字典序比较时会先看第一个字符:'9' > '1',所以不管后面的数字是什么,"982428253"都会被判定为"更大",自然就排在了更前面——这就是旧结果出现在顶部的原因。

解决方法

临时修复(无需修改表结构)

你可以在排序时把字符串类型的时间戳转换成数值类型,这样就能按照时间戳的实际大小排序了。修改你的查询语句,把ORDER BY fecha DESC替换成下面两种方式之一:

  1. 使用CAST函数转换:
SELECT DISTINCT contenidoID, titulo, fecha, DATE_FORMAT(FROM_UNIXTIME(fecha), '%d-%m-%Y') AS date 
FROM contenidos 
WHERE publicado = 1 
ORDER BY CAST(fecha AS UNSIGNED) DESC
  1. 使用CONVERT函数转换:
SELECT DISTINCT contenidoID, titulo, fecha, DATE_FORMAT(FROM_UNIXTIME(fecha), '%d-%m-%Y') AS date 
FROM contenidos 
WHERE publicado = 1 
ORDER BY CONVERT(fecha, UNSIGNED INTEGER) DESC

长期最优方案

既然fecha存储的是Unix时间戳(整数),建议直接修改表结构,把fecha字段的类型从string改成INT(如果是13位时间戳可以用BIGINT)。这样后续所有涉及排序、筛选的操作都不需要额外转换,性能和可读性都会更好:

ALTER TABLE contenidos MODIFY COLUMN fecha INT UNSIGNED NOT NULL;

(注意执行前最好备份数据,确保所有时间戳字符串都能正常转换为整数)

内容的提问来源于stack exchange,提问作者Rosamunda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:22:48