我想搜索其中特定字段以某个字符串(比如“ar”)开头或该字段包含字符串“ar”的记录。
但是,我认为这两个条件不同,因为我将返回的结果数限制为 10,并且我希望 STARTS WITH 条件比 CONTAINS 条件具有更高的权重。
例子:
SELECT *
FROM Employees
WHERE Name LIKE 'ar%' OR Name LIKE '%ar%'
LIMIT 10
要注意的是,如果有以“ar”开头的名称,它们应该受到青睐。我应该取回仅包含“ar”的名称的唯一方法是如果少于 10 个以“ar”开头的名称
我如何针对 MySQL 数据库执行此操作?
最佳答案
您需要分两部分选择它们,并在结果中添加一个 Preference 标签。从每个段中取 10 个,然后合并它们并再次取最好的 10 个。如果段 1 产生 8 个条目,则 UNION ALL 的段 2 将产生剩余的 2 个
SELECT *
FROM
(
SELECT *, 1 as Preferred
FROM Employees
WHERE Name LIKE 'ar%'
LIMIT 10
UNION ALL
SELECT *
FROM
(
SELECT *, 2
FROM Employees
WHERE Name NOT LIKE 'ar%' AND Name LIKE '%ar%'
LIMIT 10
) X
) Y
ORDER BY Preferred
LIMIT 10
关于mysql - SQL 语句的 WHERE 子句中的加权条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036145/