Сценарий поиска по нескольким ключевым словам требует некоторого экспертного ввода - PullRequest
0 голосов
/ 16 ноября 2008

Я писал сценарий поиска по ключевым словам на основе этого урока: http://www.hackosis.com/2007/11/06/howto-simple-search-engine-with-php-and-mysql/

Как и некоторые из упомянутых комментаторов, скрипт заканчивает тем, что возвращает результаты только на основе последнего слова в поисковых терминах. Поэтому я также попытался реализовать одно из предложений от другого пользователя, но теперь мне кажется, что я могу получать результаты только на основе первого поискового запроса.

Код для моего скрипта можно найти здесь: http://php.pastebin.com/m7759afd3

Мой print_r для результатов выглядит так:

SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' AND blog_title LIKE '%child%' OR blog_content LIKE '%child%' AND blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title

SELECT * FROM links WHERE link_title LIKE '%barry%' OR link_desc LIKE '%barry%' AND link_title LIKE '%child%' OR link_desc LIKE '%child%' AND link_title LIKE '%help%' OR link_desc LIKE '%help%' ORDER BY link_title

SELECT * FROM pages WHERE page_title LIKE '%barry%' OR page_content LIKE '%barry%' AND page_title LIKE '%child%' OR page_content LIKE '%child%' AND page_title LIKE '%help%' OR page_content LIKE '%help%' ORDER BY page_title

Спасибо за любую помощь, которую вы можете предложить.

Ответы [ 2 ]

3 голосов
/ 16 ноября 2008

Если вы хотите вернуть результаты, содержащие любое из ключевых слов , то замените все И на ИЛИ .

Если вы сделаете это, ваша БД проверит, существует ли какое-либо из ключевых слов в каком-либо из столбцов таблицы.

Следовательно, ваш последний запрос будет прочитан сервером БД следующим образом:

SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' OR blog_title LIKE '%child%' OR blog_content LIKE '%child%' OR blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title

и должен возвращать все записи, содержащие ключевые слова (barry, child, help) в любом столбце (blog_title, blog_content).

Надеюсь, это поможет.

1 голос
/ 16 ноября 2008

Оператор AND имеет более высокий приоритет, чем OR, поэтому, если вы хотите вернуть результаты, содержащие все ключевые слова , необходимо добавить круглые скобки следующим образом:

  SELECT * FROM blog
  WHERE (blog_title LIKE '%barry%' OR blog_content LIKE '%barry%')
    AND (blog_title LIKE '%child%' OR blog_content LIKE '%child%')
    AND (blog_title LIKE '%help%' OR blog_content LIKE '%help%')
  ORDER BY blog_title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...