У меня есть панель поиска на моем веб-сайте, и я создаю страницу, чтобы показать детали, которые имеют ЛЮБОВНОЕ описание и НРАВИТСЯ название детали из ключевых слов в поиске.
is_sold всегда будет int 1 или 0.
part_status всегда будет 1, когда он будет одобрен для показа на домашней странице, в поиске или списке категорий.
Вот мое заявление SQL
$result = mysql_query("SELECT *
FROM part
WHERE part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%'
AND is_sold = 0
AND part_status = 1
ORDER BY id DESC
")
Это список частей, независимо от того, одобрены ли они, и не важно, проданы они или нет.
Проблема, с которой я столкнулся, заключается в том, что в конце я установил номера int для ‘is_sold’ (часть продана и ‘part_status’ (если часть утверждена администратором).
Вы смешиваете and
а также or
без всяких ()
, что означает, что MySQL собирается применить свои внутренние правила приоритета операторов: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
Вы, вероятно, хотите:
((part_name LIKE x) OR (part_desc LIKE X)) AND (is_sold = 0) AND (part_status = 1)
Обратите внимание на дополнительные скобки вокруг or
компоненты.
Проблема в вашей комбинации OR
а также AND
:
WHERE part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%'
AND is_sold = 0
AND part_status = 1
Теперь, когда второе условие соответствует — OR
условие — все утверждение оценивается как true
,
Вам нужно что-то вроде:
WHERE (part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%')
AND is_sold = 0
AND part_status = 1
Вы должны структурировать свое состояние по скобкам (), вот так
$result = mysql_query("SELECT *
FROM part
WHERE (part_name LIKE ('%" . $get_search . "%')
OR part_desc LIKE ('%" . $get_search ."%'))
AND is_sold = 0
AND part_status = 1
ORDER BY id DESC
");
Хотя я согласен с esqew (вам действительно не следует использовать mysql_query), попробуйте это:
$result = mysql_query("SELECT *
FROM part
WHERE (part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%')
AND is_sold = 0
AND part_status = 1
ORDER BY id DESC
")