Как правильно сортировать по времени? - PullRequest
0 голосов
/ 19 июня 2011

Когда каждый элемент вводится в базу данных, я использую следующий метод для вставки даты:

 date_default_timezone_set('America/New_York');
 ob_start();
 $createdon = date('l, F j, Y, h:i A');
 ob_get_clean();

Это выводит что-то вроде:

  Tuesday, May 3, 2011, 04:50 PM

Это запрос:

  select test_id, why_test, date_time
  from the_test
  where p_id = '$id'
  UNION
  select pencil_id, pencil_name, date_time
  from pencils
  where p_id = '$id'
  ORDER BY 3 DESC  

Теперь, когда я использую порядок по функциям, он делает это неправильно.Даты все еще перепутаны.Я использовал порядок по дате и времени DESC.

Я использую php / phpmyadmin.

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 19 июня 2011

Неправильно хранить дату в виде строки. Вы должны хранить дату как дату.

MySQL имеет выбор соответствующих типов, относящихся к датам и времени; Я бы порекомендовал либо TIMESTAMP, либо DATETIME (возможно, последнее; посмотрите в руководстве, чтобы узнать, что лучше для вас).

Чтобы не потерять существующие данные при исправлении структуры таблицы:

  • Добавить поле с правильным типом;
  • Обновите каждую строку в вашей таблице, чтобы скопировать данные в новое поле, возможно, с помощью функции UNIX_TIMESTAMP & mdash; это одноразовая копия, которая может занять некоторое время;
  • Удалите старое поле и начните использовать новое.

ORDER BY будет работать в этом поле естественным образом, поскольку теперь вы будете использовать MySQL в том виде, как он предназначен для использования.

2 голосов
/ 19 июня 2011

try

SELECT .... ORDER BY UNIX_TIMESTAMP(`date_time`) DESC

Идея в том, чтобы превратить строку в число, которое можно отсортировать.Штамп времени Unix, если вы с ним не знакомы, - это количество секунд с 01.01.1970, поэтому, если вы можете преобразовать время в него, вы получите простой и простой способ сравнения времени.

но я считаю, что для MySQL UNIX_TIMESTAMP() требуется строка в формате: 1970-01-01 00:00:00

Но концепция остается в превращении даты (или даже ее сохранении) в метку времени Unix или в собственные типы даты MySQL, такие как datetime или timestamp

...