簡體   English   中英

當日期和時間在不同字段中時,MySQL查詢選擇一些行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM