Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL语法,说明如何使用大小写按与大多数单词的最佳匹配排序_Mysql_Sql_Search - Fatal编程技术网

Mysql SQL语法,说明如何使用大小写按与大多数单词的最佳匹配排序

Mysql SQL语法,说明如何使用大小写按与大多数单词的最佳匹配排序,mysql,sql,search,Mysql,Sql,Search,我目前正在修改opencart搜索功能,这是一个没有PHP的简化版代码,我希望按最匹配的单词排序我的结果。我已经研究了其他问题,但似乎无法掌握如何在SQL中使用CASE来简单地对匹配进行优先级排序。 有没有人能告诉我语法 SELECT id from oc_products where product_description LIKE '%my search keywords%' OR product_description LIKE '%my%' OR product_des

我目前正在修改opencart搜索功能,这是一个没有PHP的简化版代码,我希望按最匹配的单词排序我的结果。我已经研究了其他问题,但似乎无法掌握如何在SQL中使用
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%'
   WHEN product_description LIKE '%my search&'
  WHEN product_description LIKE '%my&'
  WHEN product_description LIKE '%search&'
  WHEN product_description LIKE '%keywords&',
  ASC
我知道我的语法完全不正确,但我不确定如何在代码中实现
然后
,以便按照上述顺序对结果进行优先级排序

谢谢您

第一个解决方案:
案例

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
第二种解决方案:
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
试试这个

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:

因此,您希望按照数据的外观对likewell进行排序我只希望最匹配的数据首先出现,此时带有“我的搜索关键字”的数据可能会出现在列表的一半谢谢,您的最新答案成功了,但出于某种原因,我不得不在
END
之后加上
DESC
,以便它按正确的顺序运行。无论哪种方式都很完美thanks@Adrian:很高兴帮助你
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;