Сортировка mysql часов AM PM varchar - PullRequest
1 голос
/ 11 марта 2012

Проблемы с сортировкой mysql часы

У меня есть БД с колонкой varchar

start

с данными типа (часы)

20:15 - 21:30 - 00:15

Iсортировка с

$query = 'SELECT * FROM `event` WHERE `location_id` = "' . $location['id'] . '" ORDER BY CAST(`start` AS SIGNED) ASC';

Это дает следующий вывод

00:15 - 20:15 - 21:30

Проблема в том, что мне нужно, наконец, 00:15

20:15 - 21:30 - 00:15

Кто-нибудь?

Ответы [ 3 ]

0 голосов
/ 11 марта 2012

Вы уверены в этом требовании? 24-часовые часы обычно не работают так.

Простым взломом будет считать 0 час 24:

SELECT * FROM event
WHERE location_id=?
ORDER BY REPLACE(start, '00:', '24:')

хотя в любом случае вы потеряете потенциальную индексируемость. Если вам нужна индексация, вам нужно создать еще один столбец, например. целое число минут плюс 60 по модулю 1440.

[В сторону: я настоятельно рекомендую параметризованные запросы, чтобы избежать потенциального внедрения SQL в location_id.]

0 голосов
/ 12 марта 2012

Решение

$query = 'SELECT * FROM event WHERE location_id = "' . $location['id'] . '" ORDER BY IF(LEFT(start,2) = "00",1,0), start ASC';
0 голосов
/ 11 марта 2012
CAST( substr(start,1,(length(start-6))) AS SIGNED) 

с макушки головы - без тестирования

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