PHP / SQL: сортировка - PullRequest
       19

PHP / SQL: сортировка

0 голосов
/ 03 ноября 2011

У меня есть поле (время) с такими данными:

9:00-11:00 am
7:00-9:00 am
6:30-7:30 pm
1:00-2:30 pm

Выберите * из таблицы порядок по времени ASC Результат:

1:00-2:30 pm
6:30-7:30 pm
7:00-9:00 am
9:00-11:00 am

Я не могу отсортировать это правильно. Подойдет любая помощь.

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 ноября 2011

Храните ваши времена в двух отдельных полях TIME (например, start_time и end_time), которые могут быть разумно отсортированы по базе данных. Простое сохранение временного диапазона, поскольку текст ничего не говорит базе данных, он не может волшебным образом понять, что это значит.

0 голосов
/ 03 ноября 2011

Я не , рекомендую вам сделать это, но чтобы показать вам, почему вы хотите разделить это на несколько столбцов, как рекомендовано @deceze.

Вы можете использовать mysql STR_TO_DATE () , чтобы (kindof) преобразовать строку в дату.Обратите внимание, что он полностью игнорирует первую часть временного диапазона, поэтому он эффективно сортирует по:

11:00 am
9:00 am
7:30 pm
2:30 pm

Запрос:

SELECT 
  time, 
  STR_TO_DATE(time,'%h:%i-%h:%i %p') 
FROM time_table 
ORDER BY STR_TO_DATE(time,'%h:%i-%h:%i %p') ASC

Второй запрос, который эффективно сортирует по этому:

9:00am
7:00am
6:30pm
1:00pm

:

SELECT 
  time, 
  STR_TO_DATE(CONCAT(SUBSTRING_INDEX(time,'-',1), SUBSTRING(time,LOCATE(' ', time)+1)), '%h:%i%p') 
FROM time_table
ORDER BY STR_TO_DATE(CONCAT(SUBSTRING_INDEX(time,'-',1), SUBSTRING(time,LOCATE(' ', time)+1)), '%h:%i%p') ASC

(Я уверен, что кто-то, кто более опытен с регулярными выражениями, сможет сократить это).

0 голосов
/ 03 ноября 2011

Храните ваши диапазоны дат в двух TIMESTAMP столбцах в MySQL, тогда вы можете сортировать столбцы по своему усмотрению.Вы даже можете легко выполнять более сложные сортировки, такие как сортировка по продолжительности между двумя временными метками, используя MySQL.

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