【发布时间】:2023-03-12 12:02:02
【问题描述】:
我正在尝试理解这个 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 通常用于列而不是数字?谢谢!
【问题讨论】:
-
看起来您缺少通配符,目前它无法返回任何结果。 (应该是
LIKE '%dog%'等)