I am trying to get a search result base on category and keyword(using like or regexp) however the problem is that, my query also returns other categories result it is basing on the keyword.
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
Category ID 17 doesnt really have any entries or posts in the database but my query returns results using from other categories…
Notice the parenthesis, almost like IF statements around the
(listings_categories.lc_id = 17 OR listings_categories.lc_parent = 17)andls_keywords LIKE .... This forces two conditions that must be met, rather than the multiple conditions you have: