MySQL 按指定字段自定义列表排序

[转]http://www.php42.com/index.php/database/35-sql/237-mysql-order-by-list

问题描述

大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同):

SELECT * FROM `MyTable`
WHERE `id` IN (1, 7, 3, 5)
ORDER BY `id` ASC

降序排列的 SQL 为:

SELECT * FROM `MyTable`
WHERE `id` IN (1, 7, 3, 5)
ORDER BY `id` DESC

有时以上排序并不能满足我们的需求. 例如, 我们想要按 id 以 5, 3, 7, 1 的顺序排列, 该如何实现. 这也是很多国内外同行经常遇到的问题之一.

下面我们给出按表中某字段, 以我们想要的列表方式排序的解决方案.

解决方案

用"按字段排序" (ORDER BY FIELD).

语法

ORDER BY FIELD(`id`, 5, 3, 7, 1)

要注意的是, FIELD 后面是没有空格的.

因此, 完整的 SQL 为:

SELECT * FROM `MyTable`
WHERE `id` IN (1, 7, 3, 5)
ORDER BY FIELD(`id`, 5, 3, 7, 1)

常见应用

SELECT * FROM `MyTable`
WHERE `name` IN (‘张三‘, ‘李四‘, ‘王五‘, ‘孙六‘)
ORDER BY FIELD(`name`, ‘李四‘, ‘孙六‘, ‘张三‘, ‘王五‘)

参考资料

Handy MySQL - ORDER BY FIELD

Sort results by order in list

时间: 2024-10-11 22:33:37

MySQL 按指定字段自定义列表排序的相关文章

Mysql根据指定字段的int值查出在当前列表的排名

先看表结构和数据: DROP TABLE IF EXISTS `ndb_record`; CREATE TABLE `ndb_record` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '测量记录', `user_id` bigint(20) NOT NULL COMMENT '用户id', `yellow` int(11) DEFAULT NULL COMMENT '黄色状态持续时长', `green` int(11) DEFAULT N

传入指定字段名称就可以排序的EF写法

private static IQueryable<T> SetQueryableOrder<T>(this IQueryable<T> query, string sort, string order) { if (string.IsNullOrEmpty(sort)) throw new Exception("必须指定排序字段!"); PropertyInfo sortProperty = typeof(T).GetProperty(sort,

自定义列表排序

1 package com.jdk7.chapter4; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 import java.util.List; 7 8 public class MyComparator implements Comparator { 9 10 /** 11 * o1<o2 return 1; 12 * o1=o2 return

mysql 根据某字段特定值排序

比如: 表 :user 字段:orders (值为 1,2,3) 要求根据字段  orders 按2 -> 1 -> 3 排序 使用以下语句实现SELECT *FROM userORDER BY CASE  orders  WHEN 2 THEN 1 WHEN 1 THEN 2 WHEN 3 THEN 3 END;

SQL学习之使用order by 按照指定顺序排序或自定义顺序排序

我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用是需要按照如下的方式排序,我们只需在SQL语句级别设置排序方式: 1.按照oracled的默认方式排序:select * from table_name order by  col_name  (desc|asc);(默认为升序或无序对于升降只有在数字字段); 2.按照自定义的顺序排序:   sel

java list按照元素对象的指定多个字段属性进行排序

ListUtils.Java---功能类 http://blog.csdn.net/jiangyu1013/article/details/53894218 [java] view plain copy package com.enable.common.utils; import java.lang.reflect.Field; import java.text.NumberFormat; import java.util.Collections; import java.util.Compa

sharepoint 2016 学习系列篇(13)-自定义列表应用篇-(2)添加字段栏

前面创建完列表之后,我们需要在用户信息表中,添加一些我们需要用到的字段,当然还可以添加更多的字段,这里我们只是简单做一个示例,介绍如何在自定义列表(Custom List)中创建字段栏. 我们先创建一个字段"姓名". 打开我们前面创建好的用户信息表,点击列表的空白位置,在左上角会显示出一些标签的按钮,点击"列表(List)"标签,点击列表设置(List Settings), 进入设置页面,在下方找到栏(Column),点击创建栏(Create column), 进入

SQL排序后将序号填入指定字段

1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用临时表,但在SQL Server2005中,使用ROW_NUMBER()非常方便. 以下是一个查询语句,意思是按照cid将数据排序,然后将排序后的序号填入新建的字段rowNum. select row_number() over (order by cid) as rowNum,* from t_gene 查询结果: 2.

MySQL批量替换指定字段字符串

MySQL批量替换是我们经常会用到的功能,有时站内包含敏感词,会给我们带来麻烦,而在信息量较大的情况下,一篇篇查找.修改是不现实的. 用MySQL批量替换,甚是轻松.发布在这里供参考,以备不时之需. MySQL批量替换指定字段字符串语句 UPDATE 数据表名 SET 字段名 = replace(字段名, '要替换的字符串', '替换为') WHERE 设定条件; 比如本站今天发现站内关于linux命令的文章 标题不是太好,以前都是以 linux下mkdir命令使用详解---linux创建目录命