mysql 查询根据外部数据排序

1、FIELD 函数

FIELD 是一个 MySQL 函数,用于返回一个或多个表达式在列表中的位置。它可以用于对查询结果进行排序或筛选。

2、根据外部数据排序

在 MySQL 中,可以使用 ORDER BY FIELD() 函数根据外部数据对查询结果进行排序。FIELD() 函数可以接受一个或多个参数,并返回第一个参数在后续参数中出现的位置,如果未找到,则返回 0。通过将外部数据作为 FIELD() 函数的参数,可以将查询结果按照外部数据的顺序进行排序。

以下是一个示例,假设有一个产品表 product_table,其中包含产品 ID 和产品名称两个字段,希望按照给定的产品 ID 列表对产品进行排序:

SELECT product_id, product_name
FROM product_table
WHERE product_id IN (1, 3, 2, 5, 4) -- 外部数据作为 IN 子句的参数
ORDER BY FIELD(product_id, 1, 3, 2, 5, 4); -- 外部数据作为 FIELD() 函数的参数

上面的查询语句中,WHERE 子句用于筛选出指定产品 ID 列表中存在的产品,ORDER BY 子句使用 FIELD() 函数将查询结果按照指定的产品 ID 列表顺序进行排序。

需要注意的是,上面的示例假设已经知道了外部数据的值。如果外部数据存储在其他表中,可以使用子查询或者连接操作获取外部数据。同时,如果需要对多个字段进行排序,可以在 FIELD() 函数中同时指定多个字段和顺序。

3、不在 FIELD 里的 排后面去

在 MySQL 中,可以使用 CASE WHEN 表达式和 ORDER BY 子句来将不在 FIELD() 函数中的数据排在结果集的后面。具体来说,可以使用 CASE WHEN 表达式将不在 FIELD() 函数中的数据赋予一个较大的排序值,然后在 ORDER BY 子句中按照这个排序值进行排序。

以下是一个示例,假设有一个产品表 product_table,其中包含产品 ID 和产品名称两个字段,希望按照给定的产品 ID 列表对产品进行排序,同时将不在列表中的产品排在结果集的后面:

SELECT product_id, product_name
FROM product_table
ORDER BY 
  CASE 
    WHEN product_id IN (1, 3, 2, 5, 4) THEN FIELD(product_id, 1, 3, 2, 5, 4)
    ELSE 999999 -- 不在列表中的数据赋予一个较大的排序值
  END;

上面的查询语句中,ORDER BY 子句使用 CASE WHEN 表达式将不在列表中的数据赋予一个较大的排序值,然后按照这个排序值进行排序。需要注意的是,上面的示例中将不在列表中的数据赋予了一个较大的排序值 999999,可以根据实际情况设置一个合适的值。

posted @ 2023-05-06 19:22  pine007  阅读(109)  评论(0编辑  收藏  举报