2009-01-24 58 views
6

我目前有以下两个表:搜索两个表

CREATE TABLE files_list 
(
    'listid' INT, 
    'name' VARCHAR(25), 
    'synonym' VARCHAR(25), 
    'description' VARCHAR(25) 
); 

CREATE TABLE files_tags 
(
    'tag_name' VARCHAR(25), 
    'listid' INT 
); 

如果有人使用关键字“龙珠”,此刻,我用下面的查询搜索my_list可能的匹配:

SELECT * 
FROM files_list 
WHERE name LIKE '%dragon%' 
OR synonym LIKE '%dragon%' 
OR description LIKE '%dragon%' 
OR name LIKE '%ball%' 
OR synonym LIKE '%ball%' 
OR description LIKE '%ball%' 

我不知道如何使用一个查询搜索两个表。我想向用户显示搜索结果中的数据:名称,同义词,描述和所有标签。

我的问题 1.有什么办法让当前的mysql查询更短吗? 2.如何将它与files_tags表, 相结合 - 显示来自files_list的行,它们在files_tags中匹配,但不在files_list? - 显示来自files_list的行,其中有files_list, but may not in files_tags`匹配?

你可以看到在http://hsbsitez.com/

+0

http://stackoverflow.com/questions/394041/mysql-how-to-search-multiple-tables-for-a-string-existing-in-any-column看到这个问题,你的答案就在那里:) – fmsf 2009-01-24 22:31:42

+0

[MySQL:如何搜索多个表的字符串现有的任何列](http://stackoverflow.com/questions/394041/mysql-how-to-search-multiple-tables-for-a-string-existing-in-any-column) – KindaTechy 2017-02-20 21:57:16

回答

0

当前显示的结果使用时,工会真正得到你想要为每个被联合查询中列小心。而这种情况下,子查询,似乎更有意义:

SELECT name, synonym, description FROM files_list WHERE 
     name LIKE '%dragon%' OR synonym LIKE '%dragon%' OR description LIKE '%dragon%' 
     OR name LIKE '%ball%' OR synonym LIKE '%ball%' OR description LIKE '%ball%' 
     OR listid IN (SELECT listid FROM files_tags WHERE tag_name='dragon' OR tag_name='ball'); 

一些其他问题: 当你说你要显示给用户“的标签”,你的意思是存在一个给定的listid所有标签?或只是那些匹配?如果像“%dragon%”这样的描述,即使它不在file_tags中,它也是你想要返回的标记之一吗?

1

加入表格会更有意义。

SELECT name, synonym, description, tag_name FROM `files_list` WHERE (name LIKE '%dragon%' OR synonym LIKE '%dragon%' OR description LIKE '%dragon%' OR name LIKE '%ball%' OR synonym LIKE '%ball%' OR description LIKE '%ball%') 
OUTER JOIN files_tags on files_tags.listid = files_list.listid 

OUTER JOIN将确保所有的标签都被选中,这将创建重复行的时候每个ID多个标签可用,唯一的区别是标签