使用MySQL搜索多个表

时间:2009-03-09 17:24:58

标签: sql mysql search

我正在编写一个PHP / MySQL程序,我想知道如何使用MySQL搜索多个表。

基本上,我在大多数网站的右上角都有一个搜索框,当用户在该框中搜索内容时,需要搜索users.username,users.profile_text,uploads.title,uploads.description,sets .description和comments.text。我需要获取ID(存储在每个表中的id字段中),如果可能的话,我需要像谷歌一样摘录。

3 个答案:

答案 0 :(得分:5)

您可以编写过程来单独查询每个表,也可以创建一个相对简单的视图,将重要表的所有可搜索列与一个显示它们来自哪个表的指示符组合在一起。除了正常编写语句之外,搜索多个表并不是一种神奇的方式。

第二种方法看起来像这样:

(SELECT 'Table 1' AS TableName, id as Id, text as Searchable
FROM table1)
UNION
(SELECT 'Table 2' AS TableName, table2_id as Id, name as Searchable
FROM table2)
UNION
...

然后搜索结果视图。重要的是要注意这种方法不会很快。

类似且更快的替代方法是将表专用于此任务而不是视图,并在实际表的插入/更新/删除时填充它,而不是在访问时重新计算它。

答案 1 :(得分:0)

要编写为每个表定制的选择查询,可以将结果合并以获得一个结果集。看起来它看起来像这样:

 select 'user-name', id, username from users where  username like '%term%'
 union
 select 'user-profile', id, profile from users where profile like '%term%'
 union
 select 'uploads-title', id, title from uploads where title like '%term%'
 union
 select 'uploads-description', id, description from uploads where description like '%term%'

答案 2 :(得分:0)

可能是您需要的全文搜索。

看看