SQL查询过滤器问题

时间:2011-10-12 08:14:47

标签: mysql sql

我有一个没有返回正确数据的查询过滤器... 这是为网站主页列表提取新闻文章。我有一个名为HideFromHome(boolean)的字段,我正在尝试过滤,以及发布和删除日期:

$today=date('Y-m-d');   
$filter = "HideFromHome != 1 AND ";
$filter .= "((PublishDate <= '".$today."') AND (RemoveDate > '".$today."')) OR ";
$filter .= "((PublishDate IS NULL AND RemoveDate > '".$today."')) OR "; 
$filter .= "((PublishDate <= '".$today."' AND RemoveDate IS NULL)) OR ";
$filter .= "((PublishDate IS NULL AND RemoveDate IS NULL))";

一切正常,除非它返回所有文章,即使选择了HideFromHome ......有人能发现问题吗?

3 个答案:

答案 0 :(得分:1)

您需要更多括号。每个'OR'与第一个'AND'处于同一水平 尝试:

$today=date('Y-m-d');   
$filter = "HideFromHome != 1 AND (";
$filter .= "((PublishDate <= '".$today."') AND (RemoveDate > '".$today."')) OR ";
$filter .= "((PublishDate IS NULL AND RemoveDate > '".$today."')) OR "; 
$filter .= "((PublishDate <= '".$today."' AND RemoveDate IS NULL)) OR ";
$filter .= "((PublishDate IS NULL AND RemoveDate IS NULL)))";

正如H-Man2的回答FALSE AND TRUE OR TRUE所解释的那样TRUE

答案 1 :(得分:1)

您可能需要围绕部分或部分使用括号,因为false and true or truetrue

答案 2 :(得分:0)

也许你试试HideFromHome <> 1 对于MySQL,!=(“不等于”)是<>(“更少或更大”)。

相关问题