我有一个没有返回正确数据的查询过滤器... 这是为网站主页列表提取新闻文章。我有一个名为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 ......有人能发现问题吗?
答案 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 true
为true
。
答案 2 :(得分:0)
也许你试试HideFromHome <> 1
对于MySQL,!=
(“不等于”)是<>
(“更少或更大”)。