我要概括这个问题,以便其他人可以使用答案
假设我有一个由MYSQL数据库驱动的网站
数据库包含5个表:事件,新闻,书籍,文章,提示
每个表格中都有2个字段标题和详细信息,我想在其中搜索
在网站的每个页面上,我都有一个搜索表单(文本字段和按钮)
在我输入一个单词或短语后,我想重定向到一个名为search的页面,在那里我应该将结果看作一个包含整个数据库链接的列表。
的 e.g。
预订X(将其链接到数据库中的书籍)
事件Y
第Z条
帮助:这些表是INNODB ENGINE所以全文搜索不起作用我在构建 SELECT语句以便用LIKE搜索多个表中的多个字段时遇到了麻烦。我已成功使用一个表,但有多个表和多个字段我在某些情况下收到错误或没有数据或重复数据。请帮忙看一下Select语句。
问题:如何为我的MYSQL数据库中的所有表构建搜索引擎?一些SQL注入或其他黑客预防建议也将受到赞赏。
答案 0 :(得分:0)
我的方法是基于所有具有相似列的表(我们只需要搜索的列)创建一个视图,再创建一个带有表名/实体名称(书籍,事件等)的别名列
看起来应该是这样的
EntityName Title Details
Books xxxx xxxxx
...............................
我没有解释如何使用union创建视图(如果不期望重复,则不要使用Union All)。
下一站将是使用like语句进行搜索
select * from vwSearchData where Title like '%keyword' or details like '%keyword'
下一步是显示数据及其实体名称。
当然,您需要通过从搜索表单中使用html实体进行过滤来获取关键字。
答案 1 :(得分:0)
您可以使用UNION:
(SELECT * FROM events WHERE title LIKE '$key' OR details LIKE '$key')
UNION
(SELECT * FROM news WHERE title LIKE '$key' OR details LIKE '$key')
等等。