Запрос из таблицы упорядочить по дате - PullRequest
0 голосов
/ 03 августа 2020

У меня есть таблица, которая выглядит примерно так:

|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 и показывать самые новые сверху. Я пробовал вот так:

$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 голосов
/ 03 августа 2020

Вы также должны использовать повторное зажигание t´pattern для часа, минут и секунд

Но вы всегда должны сохранять дату и время как datetime, что также будет работать с вашими данными, и форматировать только с Date_format output, что делает лайв намного больше, кроме того, 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 <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...