Проблема с фильтром SQL-запросов - PullRequest
0 голосов
/ 12 октября 2011

У меня есть фильтр запросов, который не возвращает правильные данные ... Это для извлечения новостных статей для отображения на главной странице сайта.У меня есть поле с именем HideFromHome (логическое значение), которое я пытаюсь отфильтровать, а также публиковать и удалять даты:

$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 ]

1 голос
/ 12 октября 2011

Вам нужно больше скобок.Каждое из этих «ИЛИ» находится на том же уровне, что и первая попытка «И»:

$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 голос
/ 12 октября 2011

Вам могут понадобиться скобки вокруг или частей, потому что false and true or true равно true.

0 голосов
/ 12 октября 2011

Возможно, вы попробуете HideFromHome <> 1.
!= («не равно») - это <> («меньше или больше») для MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...