2012-11-19 134 views
0

我試圖根據類別和關鍵字(使用like或regexp)得到搜索結果的基礎,但問題是,我的查詢還返回其他類別的結果它是基於關鍵字。過濾搜索類別和關鍵字

SELECT * FROM (`listings`) 
LEFT JOIN `listing_categories` ON `listings`.`ls_id` = `listing_categories`.`ls_id` 
LEFT JOIN `listings_categories` ON `listing_categories`.`lc_id` = `listings_categories`.`lc_id` 
LEFT JOIN `users` ON `users`.`id` = `listings`.`ls_user_id` 
WHERE `listings`.`ls_status` = 1 
AND listings_categories.lc_id = 17 
OR listings_categories.lc_parent = 17 
AND listings.ls_keywords LIKE '%Test Broken Functionality%' 
OR listings.ls_keywords LIKE '%Test%' 
OR listings.ls_keywords LIKE '%Broken%' 
OR listings.ls_keywords LIKE '%Functionality%' 
GROUP BY `listings`.`ls_id` 
ORDER BY MATCH(listings.ls_keywords) AGAINST('Test Broken Functionality') DESC 

分類標識17並沒有真正有任何條目或數據庫中的職位,但我的查詢返回結果從其他類別使用...

+0

因爲OR我會懷疑。 – 2012-11-19 21:35:08

+0

是的,我認爲是這樣,這就是爲什麼它需要有一些過濾,這是從我認爲是獨立的類似的條款 –

回答

0

注意括號,幾乎像IF的(listings_categories.lc_id = 17 OR listings_categories.lc_parent = 17)ls_keywords LIKE ...周圍的語句。這迫使兩個必須滿足的條件,而不是你有多個條件:

SELECT * FROM (`listings`) 
LEFT JOIN `listing_categories` 
    ON `listings`.`ls_id` = `listing_categories`.`ls_id` 
LEFT JOIN `listings_categories` 
    ON `listing_categories`.`lc_id` = `listings_categories`.`lc_id` 
LEFT JOIN `users` 
    ON `users`.`id` = `listings`.`ls_user_id` 
WHERE `listings`.`ls_status` = 1 
    AND (listings_categories.lc_id = 17 OR listings_categories.lc_parent = 17) 
    AND (listings.ls_keywords LIKE '%Test Broken Functionality%' 
     OR listings.ls_keywords LIKE '%Test%' 
     OR listings.ls_keywords LIKE '%Broken%' 
     OR listings.ls_keywords LIKE '%Functionality%') 
GROUP BY `listings`.`ls_id` 
ORDER BY MATCH(listings.ls_keywords) AGAINST('Test Broken Functionality') DESC