我有一个看起来像这样的表:
|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
蚂蚁提示?
答案 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