0

今日がデータベースに保存された日付と等しい場合、このクエリを使用して結果を表示しています。

$sh = $db->prepare('SELECT * FROM events WHERE  DATE(:today) = DATE(`start`)');
$sh->bindValue(":today", $today);
$sh->execute();
while($row = $sh->fetch(PDO::FETCH_ASSOC)) { 
here is my code when results are found
}

ただし、結果がない場合は、クエリのみをこれに変更して、上記のコードを繰り返したいと思います

SELECT * FROM events WHERE市の= (:city) AND DATE(:start) Between DATE(始点と) and DATE(終点)

これを行う良い方法は何ですか?

ありがとうございました。

4

1 に答える 1

0

1 つのクエリで実行する場合は、次のようにします。

SELECT *
FROM events
WHERE  DATE(:today) = DATE(`start`)
union all
SELECT *
FROM events
WHERE city= (:city) AND DATE(:start) Between DATE(start) and DATE(end) and
      not exists (SELECT * FROM events WHERE DATE(:today) = DATE(`start`));

編集:

最初のクエリで優先され、2 番目のクエリで優先されない 3 つの行を取得しようとしている場合は、次のようにします。

SELECT *
FROM events
WHERE  DATE(:today) = DATE(`start`) or
       (city= (:city) AND DATE(:start) Between DATE(start) and DATE(end))
order by DATE(:today) = DATE(`start`) desc, rand()
limit 3;
于 2013-08-05T01:21:06.743 に答える