SELECT rideid, year, model, rating, SUM(Relevance) as SearchRelevance FROM( SELECT rideid, year, model, rating, 1 as Relevance FROM cars WHERE cat LIKE '%$keyword%' UNION ALL SELECT rideid, year, model, rating, 1 as Relevance FROM cars WHERE cat2 LIKE '%$keyword2%') AS t GROUP BY rideid ORDER BY SUM(Relevance) DESC ";
Hi all, I got this awesome query with the help of other members, which works very well in sorting my results based on a relevance system. So that when both of my search criteria are filled those results are ordered first.
The problem is that the results which don’t match both criteria (only match 1 criteria) obviously show up in the results, but in a lower order. I want to actually trash those results, is there a way to refine this query so that the only results that come back are the ones that fill both criteria?
Changing the LIKE to = is not an option because the result fields are textareas so mysql needs to search inside the textareas for the keyword.
Thank you
You could just add
HAVING SUM(Relevance) = 2to the outerSELECT, just after theGROUP BY rideid, sinceRelevanceis a count of how many criteria matched. (If you add more criteria later, you’ll need to replace the 2 with a larger number to match.)However, you could also write the whole query in a much simpler way: get rid of the sub-select and
UNION ALL, and just doWHERE cat LIKE '%$keyword%' AND cat2 LIKE '%$keyword2%'. The whole point of the sub-select andUNIONwas to make it possible to get results that match only one or the other.