2009-01-24 129 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多個標籤可用,唯一的區別是標籤