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

如果您想在一个查询中执行此操作,您可以执行以下操作:

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`));

编辑:

如果您尝试获取 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 回答