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

标签 mysql sql where

我想搜索其中特定字段以某个字符串(比如“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/

相关文章:

php - 在复选框中显示mysql数据

mysql - 在 Eloquent 中使用 groupBy 获取每组更多行

SQL统计按年龄曝光的life time

sql - SQLite创建表AS,但重命名列并保留原始数据类型,键?

mysql - MySQL临时变量可以用在WHERE子句中吗?

Java Swing ;两个类,if 语句和新的 actionlisteners 放在哪里?

mysql - 如何仅更新 MySQL 中 DATETIME 字段的小时数?

sql - 列出 SQL Server 2012 架构中所有表的名称

mysql update + ( where + join) 语法

PHP session 与 AJAX 冲突