簡體   English   中英

PHP / SQL-在兩個日期之間從SQL查詢返回布爾結果

[英]PHP/SQL - Return boolean result from SQL query between two dates

我被要求構建一個調度程序,以根據開始/結束日期在網站上顯示特別優惠。 如果有有效的報價,其中一部分就是有條件地顯示指向頁面的鏈接。 但是我完全茫然。

以下查詢將提取所有在正確日期內的當前報價:

$now = date('Y-m-j');
$sql = "SELECT * FROM sample WHERE date_from <= '".$now."' AND date_to > '".$now."'";

我無法開發此查詢以返回TRUE / FALSE值(我需要現有的導航結構-由其他開發人員創建)。 有一些帖子指出在現有查詢上使用EXISTS()或SELECT CASE EXISTS(),然后是THEN / ELSE作為輸出。 但是經過數小時的嘗試,我才設法獲得了錯誤。

我知道有可能解決此問題,但是我想從SQL查詢本身返回一個布爾值。

案件應該工作:

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

PHP數據庫查詢將資源返回到查詢結果。 結果是select語句返回的元素的數組或對象。

如果要從sql查詢本身返回布爾值。 然后,您必須將*(星號)更改為布爾值。

根據所使用的數據庫,可用的確切語法和功能會發生變化。 但是,讓我們假設使用Microsoft 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM