php mysql在2个表中的2列中搜索

时间:2010-05-16 15:26:06

标签: php mysql

我在一个数据库中有两个表,一个叫做Cottages,另一个叫做Hotels。 在两个表中,它们具有相同的命名字段。

我基本上有一个搜索栏,我想让它在两个表中的两个字段中搜索。 (这两个字段被称为“名称”和“位置”

我到目前为止

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

但是这只搜索Cottages表,我怎样才能搜索别墅和酒店的桌子?

2 个答案:

答案 0 :(得分:3)

如果您只将一个表合并为一个并添加一个新字段(例如 cottage hotel )以识别每个表,那会更好记录。

这就叫normalization,这正是WordPress在保存sabe数据库表上的帖子,类别,附件和页面时所做的事情。

答案 1 :(得分:1)

TiuTalk的答案是正确的 - 如果两个表中的列相同,那么您应该只使用一个表来存储此数据,并添加一个类型列。

另外使用LIKE '%foo%'的速度很慢。你应该研究full text search。它还以与LIKE相同的方式处理多个表,您可以按相关性进行排序。按相关性排序时,无论它们来自哪个表,都会首先获得最相关的行。

如果您无法更改设计,并且希望从每个表中获得正好一半的结果,则可以单独查询每个结果并使用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 * - 您应该明确列出列名,否则重新排序列可能会导致此查询中断。