2014-04-14 129 views
0

我正在使用MySQL來嘗試按日期排序事件,並按時間排序。不是所有的事件都有固定的時間,因此有一個空值。我的問題是,如何構建一個查詢,該查詢使用時間字段(設置爲varchar)和具有空值的事件來檢索事件,同時刪除傳遞時間的事件。到目前爲止,這是我所擁有的,但它只是返回所有事件。而不是放棄事件。返回varchar值和空值

SELECT `event_title` , DATE_FORMAT(event_date, '%Y-%b-%d') AS formated_event_date, event_date, event_hour 
    FROM `club_events` 
    WHERE `event_date` > CURDATE() -1 
    AND HOUR(CURTIME()) > `event_hour`OR HOUR(CURTIME()) > '' 
    AND club_id != '1' 
    ORDER BY `event_date` ASC 
    LIMIT 14; 
+0

列'event_date'的數據類型是什麼?或者您可以發佈列中的一些樣本值? –

回答

0

也許你應該多用一些括號:

SELECT `event_title` , DATE_FORMAT(event_date, '%Y-%b-%d') AS formated_event_date, event_date, event_hour 
    FROM `club_events` 
    WHERE `event_date` > CURDATE() -1 
    AND (HOUR(CURTIME()) > `event_hour`OR HOUR(CURTIME()) > '') 
    AND club_id != '1' 
    ORDER BY `event_date` ASC 
    LIMIT 14; 

的原因額外的支架如下:

因爲WHERE子句無二日和第二個條件是要麼設置時間或空時間,這將有助於使用括號如:WHERE condition_a AND(condition_b OR condition_c)而不是WHERE condition_a AND condition_b OR condition_C產生不同的結果。

但確實會有一些樣本數據和預期結果。

+0

由於where子句用於日期,第二個條件是設置時間或空時間,因此使用括號如:WHERE condition_a AND(condition_b OR condition_c)而不是WHERE condition_a AND condition_b OR condition_C不會產生相同的結果。 – Olli

+0

將此添加到您的答案,而不是通過評論解釋。 –