[英]MySQL query to select some rows when dates and time are in different fields
我有一個用於事件/聚會的表,以這種方式將日期,月,年,小時和分鍾存儲在每個事件的不同字段中,方法是:
+--------+-----+-------+--------+--------+----------+
| event | day | month | year | hour | minute |
+--------+-----+-------+--------+--------+----------+
| event1 | 2 | 12 | 2015 | 11 | 25 |
| event2 | 3 | 1 | 2016 | 12 | 30 |
| event3 | 4 | 2 | 2016 | 13 | 45 |
+--------+-----+-------+--------+--------+----------+
使用這種結構,我可以通過這種方式查詢確切的當前時間:
SELECT * FROM of2ab_jcalpro_events
WHERE day = " . date("j") . "
AND month = " . date("n") . "
AND year = " . date("Y") . "
AND hour = " . date("G") . "
AND minute = " . date("i") . "
ORDER by minute ASC
LIMIT 0,3
現在...我的問題是如何選擇接下來的三個事件? 我的意思是從現在開始接下來的3個事件? 如果我有一個日期時間,這很容易,但是我不能更改表結構,這就是我的想法了嗎?
讓我們以這些值為例:
date("j") = 2
date("n") = 12
date("Y") = 2015
date("G") = 20
date("i") = 45
This mean: 2015-12-02 20:45
那么,如何立即獲取下一行?
通過連接字段值來創建mysql日期和時間字符串,然后可以通過此計算值將其與當前時間和順序進行比較。
select * events
where concat(year, '-', month, '-', day, ' ', hour, ':', minute,':00')>=now()
order by concat(year, '-', month, '-', day, ' ', hour, ':', minute,':00') desc limit 3;
如果月,日,時,分的數據沒有以兩位數字存儲,則可能必須將其轉換為兩位數字格式。
由於您沒有單個時間戳列,因此無法執行單個ORDER BY
來獲取所需的內容。 但是,您可以按日期字段的組合共同進行ORDER BY
。 我添加了LIMIT 3
以使3個事件最接近當前時間。
ORDER BY year DESC, month DESC, day DESC, hour DESC, minute DESC
LIMIT 3
在上述人員的幫助下,特別是@shadow,我找到了在上述條件下對我有用的完美查詢。
SELECT title, day, month, year, hour, minute FROM of2ab_jcalpro_events
WHERE
STR_TO_DATE(concat(day, ',', month, ',', year, ' ', hour, ':', minute,':00'),'%d,%m,%Y %H:%i:%s') > now()
order by STR_TO_DATE(concat(day, ',', month, ',', year, ' ', hour, ':', minute,':00'),'%d,%m,%Y %H:%i:%s') asc
limit 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.