Поисковая машина PHP с базой данных MYSQL? - PullRequest
0 голосов
/ 01 июля 2011

Я собираюсь обобщить этот вопрос, чтобы другие люди могли использовать ответы.
Допустим, у меня есть веб-сайт, управляемый базой данных MYSQL.
База данных содержит 5 таблиц: события, новости, книги, статьи, советы .
В каждой таблице есть 2 поля Заголовок и Подробности , в которых я хочу выполнить поиск
На каждой странице сайта есть поисковая форма (текстовое поле и кнопка).
После того, как я наберу слово или фразу, я хочу, чтобы меня перенаправили на страницу поиска, где я должен увидеть результаты в виде списка со ссылками из всей базы данных.
, например
Книга X (ссылка на нее найдена в базе данных)
Событие Y
Статья Z

HELP: Таблицы INNODB ENGINE, поэтому полнотекстовый поиск также не работал. У меня возникли проблемы при построении оператора SELECT для поиска нескольких полей из нескольких таблиц с помощью LIKE, У меня получилось с одной таблицей, но с несколькими таблицами и несколькими полями я получаю сообщение об ошибке или в некоторых случаях нет данных или дублируются данные. Пожалуйста, помогите с этим утверждением Select.

Вопрос: Как создать поисковую систему для всех таблиц в моей базе данных MYSQL? Также приветствуются некоторые SQL-инъекции или другие советы по предотвращению взлома.

Ответы [ 2 ]

0 голосов
/ 01 июля 2011

Вы можете использовать UNION:

(SELECT * FROM events WHERE title LIKE '$key' OR details LIKE '$key')  
UNION  
(SELECT * FROM news WHERE title LIKE '$key' OR details LIKE '$key')

и т. Д.

0 голосов
/ 01 июля 2011

Мой подход к ситуации заключается в создании представления на основе всех таблиц с похожими столбцами (столбцы, которые нам нужны только для поиска) и еще одним столбцом псевдонимов с именами таблиц / именами сущностей (Книги, события и т. Д.)

Это должно выглядеть так

EntityName      Title     Details
Books            xxxx      xxxxx
...............................

Я не объясняю, как создавать представления с помощью union (не используйте Union All, если не ожидаете дублирования).

Следующая остановка - поиск по операторам like

select * from vwSearchData where Title like '%keyword' or details like '%keyword'

Следующим шагом является отображение данных вместе с именами их сущностей.

Конечно, вам нужно получить ключевое слово, отфильтровав HTML-сущности из формы поиска.

...