2016-02-14 71 views
0

我有兩個表:IF和並在MySQL查詢

Concert: 
id | name | date 
1 | aaa | 2016-02-14 
2 | bbb | 2016-02-15 

Times: 
id | concert_id | time 
1 | 1   | 10:00:00 
2 | 1   | 16:00:00 
3 | 1   | 21:00:00 
4 | 2   | 10:00:00 
5 | 2   | 15:00:00 
6 | 2   | 21:00:00 

我想一天一音樂會。例如,對於 「2016年2月14日」:

SELECT * FROM Concert as c LEFT JOIN Times as t ON c.id = t.concert_id WHERE c.date = '2016-02-14' AND t.time > CURTIME() 

該工作正常,ID爲3只返回時間,但對於:

SELECT * FROM Concert as c LEFT JOIN Times as t ON c.id = t.concert_id WHERE c.date = '2016-02-15' AND t.time > CURTIME() 

也返回最後一個ID(6)。應該是所有時間(4,5,6),因爲這是第二天。

如何比較CURTIATE和CURDATE作爲我的例子? IF表達式?但是如何?

+1

由於CURTIME()函數返回服務器的當前時間,您將得到不同的結果,具體取決於執行每個查詢的時間。 – Nicarus

+0

你會在一張桌子和另一張桌子的日期存儲什麼? –

+0

將日期和時間作爲單個實體存儲? – Strawberry

回答

0

這聽起來像你只想NOW()。但這並不奏效,因爲時間和日期處於不同的列。對於即將到來的演唱會基本的查詢是:

SELECT * 
FROM Concert c JOIN 
    Times t 
    ON c.id = t.concert_id 
WHERE (c.date = '2016-02-14' AND t.time > CURTIME()) OR 
     (c.date > '2016-02-14'); 

其實,你可以用CURDATE()取代'2016-02-14'

0

可以使用CURDATE的實際日期

SELECT * 
    FROM Concert as c 
    LEFT JOIN Times as t ON c.id = t.concert_id 
    WHERE c.date = CURDATE() AND t.time > CURTIME(); 

或轉換日期你喜歡

SELECT * 
    FROM Concert as c 
    LEFT JOIN Times as t ON c.id = t.concert_id 
    WHERE c.date =str_to_date('2016-02-14', '%Y/%m/%d') 
    AND t.time > CURTIME(); 
    str_to_date('2016-02-14', '%Y/%m/%d') 
0

這也可能是一個時區的問題。請參考下面的鏈接查看關於MySQL的時區:

http://stackoverflow.com/questions/2934258/how-do-i-get-the-current-time-zone-of-mysql 

而且,您的查詢:

SELECT * FROM Concert as c LEFT JOIN Times as t ON c.id = t.concert_id WHERE c.date = '2016-02-15' AND t.time > CURTIME() 

如果你從PHP調用這個你可以與任何當前的日期給予更換CURTIME()在PHP中(你可以回顯查詢來調試)。

正因爲如此,實際上取決於什麼時候是CURTIME(),因爲如果你的時區是在MySQL的不同,你可能會認爲你是在20:00運行查詢的時候,居然也可以是23:00 ...