2010-05-16 69 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 * - 您应该明确列出列名,否则重新排列列可能会导致此查询中断。