2012-07-15 35 views
1

我有两个表格和一个搜索表单来搜索关键字。我试图在两个表上搜索多个列的关键字,如果查询匹配,则获取id列以供进一步使用。我曾经尝试这样做(假设“优惠券”一词用户搜索)在两个mysql表中搜索多个列?

SELECT `ID` FROM `Profiles` AS `p` WHERE `p`.`Status` = 'Active' AND `p`.`Address` 
LIKE '%coupon%' OR `p`.`BusinessName` LIKE '%coupon%' OR `p`.`BusinessSubCategory` 
LIKE '%coupon%' OR `p`.`DescriptionMe` LIKE '%coupon%' OR `p`.`Tags` LIKE '%coupon%' 
UNION SELECT `id` FROM `products` AS `d` WHERE `d`.`status` = 'approved' AND 
`d`.`title` LIKE '%coupon%' OR `d`.`desc` LIKE '%coupon%' OR `d`.`tags` LIKE '%coupon%' 

在这里,我想谱和与关键字匹配的产品ID的ID。我尝试了这一点,这返回了非常奇怪的结果,看起来只有配置文件ID。所以,它是一个错误的查询。这种搜索的查询应该是什么?内部联接?请给我一些示例查询,我将非常感谢任何帮助。

回答

1

试试这个::

SELECT `ID`,'profile_ID' FROM 
`Profiles` AS `p` 
WHERE `p`.`Status` = 'Active' AND `p`.`Address` 
LIKE '%coupon%' OR `p`.`BusinessName` LIKE '%coupon%' OR `p`.`BusinessSubCategory` 
LIKE '%coupon%' OR `p`.`DescriptionMe` LIKE '%coupon%' OR `p`.`Tags` LIKE '%coupon%' 


UNION ALL 

SELECT `id`, 'productID' FROM `products` AS `d` WHERE `d`.`status` = 'approved' AND 
`d`.`title` LIKE '%coupon%' OR `d`.`desc` LIKE '%coupon%' OR `d`.`tags` LIKE '%coupon%' 
+0

它返回任何东西,因为我可以看到有两种产品的Desc列优惠券关键字。所以,至少有两个产品应该返回,但没有任何:( – Prashank 2012-07-15 12:36:12

+0

@那里的状态如何? – 2012-07-15 12:40:33

+0

所有产品状态都已批准 – Prashank 2012-07-15 12:42:19

2

首先,我不会用AS p,当你不这样做的INNER JOIN等...好像勉强,再加上我猜你AND后需要括号 - 周边OR以及如果你明确希望找到状态为“活动”的结果。

如何:

SELECT ID FROM Profiles WHERE Status = 'Active' AND (Address LIKE '%coupon%' OR BusinessName LIKE '%coupon%' OR BusinessSubCategory LIKE '%coupon%' OR DescriptionMe LIKE '%coupon%' OR Tags LIKE '%coupon%') 
UNION SELECT id FROM products WHERE status = 'approved' AND (title LIKE '%coupon%' OR desc LIKE '%coupon%' OR tags LIKE '%coupon%') 
+0

我一直在改变查询,我先试着INNER JOIN,然后尝试了UNION,所以我认为AS p或AS d不会影响结果。 – Prashank 2012-07-15 12:38:21

+0

ORs周围的括号尽管可以根据您想要的结果产生差异 – NewInTheBusiness 2012-07-15 12:43:02

+0

'desc LIKE'%coupon%'或OR tags LIKE'%coupon%'附近的语法错误)第2行限制0,30' – Prashank 2012-07-15 12:59:39