Слишком конкретный запрос MySQL не работает

0

Я написал запрос, чтобы найти похожие идентификаторы на основе тегов из текущего идентификатора, как и амазонки, вам также понравится. Проблема в том, что в моем примере я хочу исключить 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!= работает только тогда, когда есть один при рождении и между каждым подобным или... я попытался поменять каждый из них, и запрос не запустится, но текущая строка работает отлично!

Спасибо,

  • 0
    Можете ли вы вставить полную строку запроса? Или пример значения $ аналогичный? Спасибо
Теги:

1 ответ

5
Лучший ответ

Убедитесь, что ваши $похожие переменные заключены в круглые скобки.

если 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
  • 0
    Умное мышление. Я собирался попросить автора описать его таблицу в отношении вероятности того, что поле id было текстовой строкой, а не int или чем-то, но это кажется гораздо более вероятным объяснением.
  • 0
    Я перестроил свою $ подобную строку, добавив в каждую скобку и $ bookid! = В каждой. Это сработало отлично! Этот сайт экономит мне ЧАСЫ !! Огромное спасибо. Для тех, кто заинтересован, я отредактировал свой пост, чтобы показать befoer & after строки запроса

Ещё вопросы

Сообщество Overcoder
Наверх
Меню