0

我有一个使用 php/mysql 创建的事件列表,它显示未来 14 天内即将发生的事件。数据库有 8 个字段

event_ID,
date_1,
date_2,
eventTitle,
eventDetails,
location,
publish,
updated.

我已经使用这个 sql 语句创建了一个列表

SELECT gpe.*, gpr.name 
FROM growl_presevents gpe, growl_presrail gpr 
WHERE gpe.location LIKE gpr.railID AND (date_1 >= '$today' AND date_1 <= '$week') 
AND gpe.publish = 'y' 
ORDER BY date_1 ASC

数组由这些语句填充

$today = date('Y-m-d');                     /// Todays date

$week = date('Y-m-d', time() + (86400*14)); /// Todays date + 14 days

该列表很好,但我需要进行调整,以便在事件持续超过一天时显示事件,并且 date_1 在 14 天期限之外。

例如(只是示例数据不是实际的)

如果今天是 2012-02-01

date_1      date_2      location   Title         details

2012-02-07  NULL        Loc001     Show          Stage show

2012-02-13  2012-02-18  Loc002     Open Air      Festival

2012-02-17  NULL        Loc001     Comedy        Comedy Show

使用我上面的 SQL 查询,前两个日期将显示 '$today',在 '3rd' 将显示所有三个日期,然后在 '8th' 第一行将消失。到目前为止一切正常,但这是我需要帮助的地方。在第 14 行第 2 行使用此查询会消失,但该事件一直持续到 18 日,因此我希望它仍然显示到 18 日。

可能有一种简单的方法可以做到这一点,但我无法理解它,所以任何帮助将不胜感激。

谢谢

菲尔

4

1 回答 1

0

试试这个

SELECT gpe.*, gpr.name  
FROM growl_presevents gpe, growl_presrail gpr  
WHERE gpe.location LIKE gpr.railID 
AND (
    (date_1 >= '$today' AND date_1 <= '$week')
    OR (ISNULL(date_2,0) >= '$today' AND ISNULL(date_2,0) <= '$week')
    )  
AND gpe.publish = 'y'  
ORDER BY date_1 ASC 

因此,基本上对 date_2 进行与对 date_1 相同的检查作为 OR。如果找到 NULL 日期,则使用 ISNULL 提供 0。

于 2012-04-25T13:46:18.160 回答