0

開始日が現在の日付からのすべてのイベントを選択しようとする次のクエリを作成しました (テーブルに start_date フィールドと end_date フィールドがあります)。

$query = "SELECT id,title,start_date 
          FROM events 
          WHERE start_date > NOW() - INTERVAL 30 DAY AND city = '$cityName' 
          ORDER BY start_date DESC";

私が気付いた上記のコードの唯一の問題は、イベントが開始された場合、たとえば 3 か月前にイベントがNOW()表示されないことでした。行って書き直そうとしましたが、うまくいきませんでした。これは私が管理したものです:

"SELECT id,title,start_date 
 FROM events 
 WHERE start_date >= NOW() - INTERVAL 30 DAY || start_date <= NOW() && end_date >= NOW() - INTERVAL 30 DAY";

私がやろうとしたことは、開始日が現在の日付 ( NOW()) 以上であるすべてのイベントを選択するか、現在の日付よりも前である可能性がある start_date のイベントを選択することですが、終了日はNOW(). これを修正する方法について何か提案はありますか? 私は、イベントが発生していない限り、すべてのイベントを表示したいと考えています (もちろん、終了日が現在の実際の日付よりも小さくないことを意味します)。

ありがとう、

編集:

$query = "SELECT id,title,start_date FROM events WHERE start_date > NOW() - INTERVAL 30 DAY AND city = '$cityName' ORDER BY start_date DESC";

$query_posted = "SELECT id,title,start_date FROM events WHERE start_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) AND city = '$cityName' AND category = '$tag' ORDER BY start_date DESC";

最初のものは変更後にイベントをロードしましたが (変更は含まれていません)、2 番目のものは失敗しました。最後に別の 2 つの AND が原因だと思います。

4

1 に答える 1

1

現時点で実行された場合の要求は次のとおりです。

WHERE start_date >= 2012-08-03 || start_date <= 2012-09-02 && end_date >= 2012-08-03

これを機能させるには、括弧を使用して比較を区切る必要があります。

WHERE start_date >= NOW() - INTERVAL 30 DAY || (start_date <= NOW() && end_date >= NOW() - INTERVAL 30 DAY)

BETWEENまたは、次の演算子を使用できます。

WHERE start_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
    AND end_date >= NOW() - INTERVAL 30 DAY

end_date最後に、 をよりも大きくしたいと述べていますNOW()。をドロップするだけ- INTERVAL 30 DAYで取得できます:

WHERE start_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() AND end_date >= NOW()
于 2012-09-02T21:06:18.557 に答える