按日期从表顺序中查询

时间:2020-08-03 13:41:20

标签: mysql datetime

我有一个看起来像这样的表:

|ID |       date          |
|-------------------------|
| 1 | 2020/08/03 15:27:34 |
| 2 | 2020/08/03 15:27:34 |
| 3 | 2020/08/03 15:21:34 |
| 4 | 2020/08/03 15:27:34 |
| 5 | 2020/08/03 15:28:34 |
| 6 | 2020/08/03 15:27:34 |

这是我用来保存当前日期的格式:

date_default_timezone_set('Europe/Oslo');      
$date=date("Y/m/d H:i:s"); // Where $date is the value I am saving to the table.

我想查询并显示最后5个,并在顶部显示最新的5个。我这样尝试过:

$query = "SELECT * FROM table ORDER BY STR_TO_DATE(date, '%Y/%m/%d H:i:s') DESC LIMIT 5";

它显示5行,但不按顺序显示。这是我得到的顺序:

Row 1: 2020/08/03 15:27:34
Row 2: 2020/08/03 15:27:34
Row 3: 2020/08/03 15:21:34
Row 4: 2020/08/03 15:27:34
Row 5: 2020/08/03 15:28:34

蚂蚁提示​​?

1 个答案:

答案 0 :(得分:0)

您还必须使用t模式重新分配来表示小时,分钟和秒数

但是您应该始终将日期时间另存为datetime,这也将与您的数据一起使用,并且仅使用Date_format格式化输出,这样除了str_to_date不使用索引之外,还使工作更加轻松

CREATE TABLE table1 (
  `ID` INTEGER,
  `date` varchar(24)
);

INSERT INTO table1
  (`ID`, `date`)
VALUES
  ('1', '2020/08/03 15:27:34'),
  ('2', '2020/08/03 15:27:34'),
  ('3', '2020/08/03 15:21:34'),
  ('4', '2020/08/03 15:27:34'),
  ('5', '2020/08/03 15:28:34'),
  ('6', '2020/08/03 15:27:34');
SELECT * FROM table1 ORDER BY STR_TO_DATE(`date`, '%Y/%m/%d %H:%i:%s') DESC LIMIT 5
ID | date               
-: | :------------------
 5 | 2020/08/03 15:28:34
 1 | 2020/08/03 15:27:34
 2 | 2020/08/03 15:27:34
 4 | 2020/08/03 15:27:34
 6 | 2020/08/03 15:27:34

db <>提琴here

相关问题