Domanda

Im currently amending the opencart search feature, this is a simplified version of the code without the PHP, Im looking to order my results by the most matched words. I have looked at other questions but cant seem to grasp how to use CASE in SQL to simply prioritise my matches. Is it possible someone could show me the syntax

SELECT id from oc_products where 
  product_description LIKE '%my search keywords%' 
  OR product_description LIKE '%my%' 
  OR product_description LIKE '%search%' 
  OR product_description LIKE '%keywords%' 
ORDER BY
   CASE 
   WHEN product_description LIKE '%my search keywords%'
   WHEN product_description LIKE '%my search&'
  WHEN product_description LIKE '%my&'
  WHEN product_description LIKE '%search&'
  WHEN product_description LIKE '%keywords&',
  ASC

Im aware that my syntax is totally off but Im not sure how to implement THEN within that code to allow for prioritizing my results in the above order.

Thank you

È stato utile?

Soluzione

First solution : CASE

SELECT id 
FROM oc_products 
WHERE product_description LIKE '%my search keywords%' 
   OR product_description LIKE '%my%' 
   OR product_description LIKE '%search%' 
   OR product_description LIKE '%keywords%' 
ORDER BY CASE WHEN product_description LIKE '%my search keywords%' THEN 0
              WHEN product_description LIKE '%my search&' THEN 1
              WHEN product_description LIKE '%my&' THEN 2
              WHEN product_description LIKE '%search&' THEN 3
              WHEN product_description LIKE '%keywords&' THEN 4
         END DESC

Second solution : listing conditions in ORDER BY

SELECT id 
FROM oc_products 
WHERE product_description LIKE '%my search keywords%' 
   OR product_description LIKE '%my%' 
   OR product_description LIKE '%search%' 
   OR product_description LIKE '%keywords%' 
ORDER BY product_description LIKE '%my search keywords%' DESC
       , product_description LIKE '%my search&' DESC
       , product_description LIKE '%my&' DESC
       , product_description LIKE '%search&' DESC
       , product_description LIKE '%keywords&' DESC

Altri suggerimenti

SELECT id from oc_products where 
  product_description LIKE '%my search keywords%' 
  OR product_description LIKE '%my%' 
  OR product_description LIKE '%search%' 
  OR product_description LIKE '%keywords%' 
GROUP BY product_description ASC

try this

SELECT id 
FROM oc_products 
WHERE product_description LIKE '%my search keywords%' 
   OR product_description LIKE '%my%' 
   OR product_description LIKE '%search%' 
   OR product_description LIKE '%keywords%' 

ORDER BY product_description LIKE '%my search keywords%' desc
, product_description LIKE '%my search%' desc 
, product_description LIKE '%my%' desc 
, product_description LIKE '%search%' desc
, product_description LIKE '%keywords%' desc;

SQL fiddle here: http://www.sqlfiddle.com/#!2/8b043/4

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top