帮助用ORDER BY和CASE来理解这个mySQL查询

我试图理解这个mySQL查询.它应该使用搜索关键字’brown fox lazy dog’搜索表’items’,并根据其相关性或记录中出现的次数返回结果.

SELECT *
FROM `items`
WHERE `description` LIKE 'quick'
AND (
  `description` LIKE 'brown'
  OR `description` LIKE 'fox'
  OR `description` LIKE 'lazy'
  OR `description` LIKE 'dog'
)
ORDER BY (
  (
    CASE WHEN `description` LIKE 'brown'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'fox'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'lazy'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'dog'
    THEN 1
    ELSE 0
    END
  )
) DESC
LIMIT 0, 30

我不理解的部分是ORDER BY和CASE子句中的部分.假设某个特定记录匹配所有被搜索的4个关键字,我们得到ORDER BY(4)?这个4如何与特殊行相关联?我的理解是ORDER BY通常用于列而不是数字?谢谢!

最佳答案 ORDER BY可用于从每行中的字段派生的任何值.在这种情况下,我们按照描述字段中出现的重要单词的数量进行排序.正如你所说,如果一个特定的记录与所有4个关键字匹配,那么它得到一个4,并最终在(降序)排序的顶部.如果记录只与其中一个关键字匹配,则得到1并最终到达底部.你甚至可以说ORDER BY RAND(),它完全符合你的期望. ORDER BY RAND()LIMIT 1是从表中随机选择单行的一种非常常见的习语.但是,不要在大表上使用ORDER BY RAND()LIMIT 1,因为它仍然为每一行生成一个随机数(非常昂贵),只是为了找出哪一个是最小的.

点赞