Я написал запрос, чтобы найти похожие идентификаторы на основе тегов из текущего идентификатора, как и амазонки, вам также понравится. Проблема в том, что в моем примере я хочу исключить bookid 30 из этого поиска.
Вот мой запрос:
note: $похоже в основном строка, заполненная тегами, созданными с помощью нескольких "как% item% or"
$query = "SELECT * FROM books
WHERE bookid !=30
AND {$similar}
AND visible ='1'
AND level ='2'
LIMIT 3";
Часть, которая не работает, - это где bookid!= Я пробовал IS NOT, < > переупорядочить и что еще когда-либо мог найти. Этот запрос все еще работает, он выводит три строки, но по-прежнему включает bookid 30
Может кто-нибудь объяснить, что здесь происходит? мой запрос становится слишком сложным и нуждается в реструктуризации?
Плохая альтернатива, с которой я столкнулся, делала ограничение на 4 элемента, отправляя их в цикл while, чтобы извлекать каждую строку и исключать буклет, который мне не нужен. Это просто кажется бессмысленным, когда я знаю, что это можно сделать в запросе.
Ive исправил это, восстановив мой запрос и $аналогичную строку Перед
SELECT * FROM books WHERE bookid !=30 AND tags LIKE '%one%' OR tags LIKE '% two%' OR tags LIKE '% three%' AND visible ='1' AND level ='2' LIMIT 3
После
SELECT * FROM books WHERE bookid !=30 AND (bookid!=30 AND tags LIKE '%one%') OR (bookid!=30 AND tags LIKE '% two%') OR (bookid!=30 AND tags LIKE '% three%') AND visible ='1' AND level ='2' LIMIT 3
Одна вещь, которую я заметил, это странно, это bookid!= работает только тогда, когда есть один при рождении и между каждым подобным или... я попытался поменять каждый из них, и запрос не запустится, но текущая строка работает отлично!
Спасибо,
Убедитесь, что ваши $похожие переменные заключены в круглые скобки.
если OR находится посередине, он будет оцениваться как
(bookid != 30 AND item like '%item1%') OR (item like '%item2%' AND visible = 1 AND level= 2)
вместо
bookid != 30 AND (item like '%item1%' OR item like '%item2%') AND visible = 1 AND level= 2