我在一个数据库中有两个表,一个叫做Cottages,另一个叫做Hotels。 在两个表中,它们具有相同的命名字段。
我基本上有一个搜索栏,我想让它在两个表中的两个字段中搜索。 (这两个字段被称为“名称”和“位置”
我到目前为止
$sql = mysql_query("SELECT * FROM Cottages WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 0, 30");
但是这只搜索Cottages表,我怎样才能搜索别墅和酒店的桌子?
答案 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 *
- 您应该明确列出列名,否则重新排序列可能会导致此查询中断。