我想搜索一个特定字段的STARTS带有一些字符串(让我们说"ar")或字段CONTAINS字符串"ar"的记录.
但是,我认为这两个条件不同,因为我将返回的结果数限制为10,并且我希望STARTS WITH条件的权重比CONTAINS条件更重.
例:
SELECT *
FROM Employees
WHERE Name LIKE 'ar%' OR Name LIKE '%ar%'
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
问题是,如果有名称以"ar"开头,那么它们应该受到青睐.唯一的方法是我应该找回一个只包含"ar"的名字,如果有少于10个以"ar"开头的名字
如何对MySQL数据库执行此操作?
Ric*_*iwi 11
您需要分两部分选择它们,并在结果中添加一个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
Run Code Online (Sandbox Code Playgroud)