我正在使用MySQL来尝试按日期排序事件,并按时间排序。然而,并非所有事件都具有设定时间,因此具有空值。我的问题是如何构建一个查询来检索包含时间字段(设置为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 :(得分: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产生的结果不一样。
但是拥有一些样本数据和预期结果真的很棒。