0

次の 14 日間に予定されているイベントを表示する php/mysql で作成されたイベント リストがあります。データベースには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

リストは問題ありませんが、イベントが 1 日以上続き、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 クエリを使用すると、最初の 2 つの日付に「$today」が表示され、「3 日目」には 3 つすべてが表示され、「8 日目」には最初の行が表示されなくなります。ここまでは問題ありませんが、ここで助けが必要です。'14th' 行 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_1 に対して OR として行うのと同じチェックを date_2 に対して行います。NULL の日付が見つかった場合は、ISNULL を使用して 0 を指定します。

于 2012-04-25T13:46:18.160 に答える