我被要求建立一个调度程序,根据开始/结束日期在网站上显示特别优惠。部分原因是,如果存在有效的要约,则有条件地显示指向该页面的链接。但我完全不知所措。
以下查询提取任何属于正确日期的当前要约:
$now = date('Y-m-j');
$sql = "SELECT * FROM sample WHERE date_from <= '".$now."' AND date_to > '".$now."'";
我无法开发此查询以返回TRUE / FALSE值(我需要现有的导航结构 - 由其他开发人员创建)。有一些帖子声明在现有查询中使用EXISTS()或SELECT CASE WHEN EXISTS(),然后输出THEN / ELSE。但经过几个小时的尝试破解,我只是设法犯了错误。
我知道可能可以解决这个问题,但我想从SQL查询本身返回一个布尔值。
答案 0 :(得分:1)
案件应该有效:
select
CASE
WHEN date_from <= '".$now."' AND date_to > '".$now."' THEN 'TRUE'
ELSE 'FALSE'
END
from yourtable
也许更好
SELECT exists (
SELECT * FROM sample WHERE date_from <= '".$now."' AND date_to > '".$now."') as BOO
如果匹配,BOO将为1
答案 1 :(得分:0)
PHP数据库查询将资源返回到查询结果。 结果是select语句返回的元素的数组或对象。
如果要从sql查询本身返回一个布尔值。然后你必须将*(星号)改为布尔值。
根据您使用的数据库,可用的确切语法和功能会发生变化。但我们假设微软sql或postgres ..
Postgres的:
$sql = "SELECT (count(*)>0) as bool_result FROM sample WHERE date_from <= '".$now."' AND date_to > '".$now."'";
Microsoft SQL:
$sql = "SELECT (case when count(*)>0 then 1 else 0 end) as int_result FROM sample WHERE date_from <= '".$now."' AND date_to > '".$now."'";
Microsoft SQL使用微小的int或bit来表示布尔值。因此无法返回严格意义上的“布尔”。因此,当布尔比较为1或0的结构时的情况。
如果你想知道是否返回了任何行而你不关心结果集,那么mssql_num_rows或pg_num_rows可能是你的答案。两者都返回查询结果集中的行数。然后,您可以将其与等于0或1进行比较。
这与您可以获得的答案非常接近,而无需提供代码示例和更多详细信息。
以下是一个例子:
$sql = "SELECT * FROM sample WHERE date_from <= '".$now."' AND date_to > '".$now."'";
$res = pg_query($sql);
if( pg_num_rows($res) > 0 )
ShowNav();