2010-05-16 38 views
3

我在一個DB中有兩個表,一個叫Cottages,一個叫Hotels。 在這兩個表中它們都有相同的命名字段。php mysql在2個表中的2列中搜索

我基本上有一個搜索欄,我希望它在兩個表中的字段中搜索。 (這兩個領域被稱爲「名稱」和「位置」

到目前爲止,我已經

$sql = mysql_query("SELECT * FROM Cottages WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 0, 30"); 

但這只是搜索別墅表,我怎樣才能使它同時搜索別墅和酒店表?

如果你只在一個合併兩個表,並添加一個新的領域像 type(與價值觀一樣 山寨酒店)到identiy每個記錄

回答

3

效果會更好。

這就是normalization,這正是WordPress在sabe數據庫表中保存帖子,類別,附件和頁面時所做的。

+0

+1非常好的建議。 – 2010-05-16 15:38:37

1

TiuTalk的答案是正確的 - 如果兩個表中的列都相同,那麼您應該只能爲此數據使用一個表,然後添加一個類型列。

另外使用LIKE '%foo%'很慢。你應該看看full text search。它也以與LIKE plus相同的方式處理多個表格,您可以按相關性進行排序。按相關性排序時,首先獲取最相關的行,而不管它們來自哪個表。

如果你不能改變你的設計,你想正好有一半從每個表中的結果可以分別查詢每個並使用UNION ALL的結果結合起來:

(SELECT * FROM Cottages WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 15) 
UNION ALL 
(SELECT * FROM Hotels WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 15) 

顯然,列必須是這兩個表中的相同工作。儘管不要使用SELECT * - 您應該明確列出列名,否則重新排列列可能會導致此查詢中斷。