SQL语句的WHERE子句中的加权条件

Ste*_*hur 8 mysql sql where

我想搜索一个特定字段的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)