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

カテゴリID17には実際にはデータベースにエントリや投稿がありませんが、クエリは他のカテゴリからの結果を返します...

4

1 に答える 1

0

(listings_categories.lc_id = 17 OR listings_categories.lc_parent = 17)との周りのIFステートメントとほとんど同じように、括弧に注意してくださいls_keywords LIKE ...。これにより、複数の条件ではなく、満たす必要のある2つの条件が強制されます。

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
于 2012-11-19T21:36:59.270 に答える