2012-07-15 16 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