基于SQL查询排序结果


Order results based on SQL query

我目前查询表中具有特定category的项目。我已经扩展了这个查询,也查看项目description列。我的问题是,我如何排序结果,使category匹配是第一和描述是最后?

`SELECT * FROM myTable WHERE `category` LIKE '%keyword%' || `description` LIKE '%keyword%'

在我上面的查询中,仅仅添加ORDER BY category是不够的。我能想到的唯一方法是用两个单独的查询和两个单独的结果变量。

我用phpmysqli

可以这样做

SELECT *
FROM myTable
WHERE `category` LIKE '%keyword%' || `description` LIKE '%keyword%'
ORDER BY
    CASE
      WHEN `category` LIKE '%keyword%' THEN 1
      WHEN `description` LIKE '%keyword%' THEN 0
END 

可以这样做

SELECT *
FROM myTable
WHERE `category` LIKE '%keyword%' || `description` LIKE '%keyword%'
ORDER BY
    CASE
      WHEN `category` LIKE '%keyword%' THEN 1
      ELSE 0
    END CASE
      DESC

如果您想扩展SQL查询并保留这些顺序,您可以使用:

SELECT *
FROM myTable
WHERE `category` LIKE '%keyword%' || `description` LIKE '%keyword%'
ORDER BY
    CASE
      WHEN `category` LIKE '%keyword%' THEN 1
      ELSE 0
    END CASE
      DESC,
    CASE
      WHEN `description` LIKE '%keyword%' THEN 1
      ELSE 0
    END CASE
      DESC

结果,description结果和category结果,将开始-因为没有指定,我想,所以它被请求或接受。