我有場(時間)的數據是這樣的:PHP/SQL:排序
9:00-11:00 am
7:00-9:00 am
6:30-7:30 pm
1:00-2:30 pm
SELECT * FROM表的順序按時間ASC 結果:
1:00-2:30 pm
6:30-7:30 pm
7:00-9:00 am
9:00-11:00 am
我有點不能是正確的。任何幫助都可以。
感謝
我有場(時間)的數據是這樣的:PHP/SQL:排序
9:00-11:00 am
7:00-9:00 am
6:30-7:30 pm
1:00-2:30 pm
SELECT * FROM表的順序按時間ASC 結果:
1:00-2:30 pm
6:30-7:30 pm
7:00-9:00 am
9:00-11:00 am
我有點不能是正確的。任何幫助都可以。
感謝
存儲在兩個不同的領域TIME
(start_time
和end_time
爲例),可以通過合理的數據庫進行排序您的時間。只是將時間範圍存儲爲文本不會告訴數據庫任何事情,它不能神奇地理解它的含義。
+1:PHP的自然排序可能對字符串有效,但我完全同意。 –
好吧生病吧試試吧 –
將您的日期範圍存儲在MySQL的兩個TIMESTAMP列中,然後您可以根據需要對列進行排序。您甚至可以進行更高級的排序,例如使用MySQL輕鬆排序兩個時間戳之間的時間間隔。
我不,建議你這樣做,而是告訴你爲什麼你要拆分此成多列作爲@deceze建議。
您可以使用mysql的STR_TO_DATE()(kindof)將字符串轉換爲日期。需要注意的是它完全忽略了時間範圍的第一部分,所以它的有效排序上:
11:00 am
9:00 am
7:30 pm
2:30 pm
查詢是:
9:00am
7:00am
6:30pm
1:00pm
:
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
,有效地排序在這個第二查詢
是:
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
(我敢肯定,一個比正則表達更精通的人可以縮短這個)。
該字段的數據類型是什麼?如果它不是一個日期,那麼它將不會爲你正確排序(至少使用該查詢)。 – hafichuk