数据库多维度order by 排序分析

案例

开发一个类似与咸鱼app的产品,其中有个需求是在登录用户打开app时,首页展示其他人发布的商品列表,
商品信息中包含商品信息、发布时间、发货地点,取货方式等多个字段,现有需求:展示信息优先将同城且支持上门的需求按最新发布时间排序
其次显示同城支持快递的,然后是不同城支持快递的,最后是不同城且不支持快递的,每页数据20条进行分页。

表结构

CREATE TABLE `t_order` (`orderId` INT(11) NOT NULL AUTO_INCREMENT,`userId` INT(11) NOT NULL,`nickname` VARCHAR(255) NOT NULL,`title` VARCHAR(40) NOT NULL,`logistics` TINYINT(1) NOT NULL,        -- 物流取货方式 3 上门取件 2 快递 1 其他 `area` BIGINT(20) NOT NULL COMMENT '0', -- 发货地点编码`address` VARCHAR(255) NOT NULL,`mobile` VARCHAR(20) NOT NULL,`isPublic` TINYINT(1) UNSIGNED ZEROFILL NOT NULL DEFAULT '0',`wechat` VARCHAR(30) NOT NULL,`status` TINYINT(1) NOT NULL,`pushTime` INT(11) NOT NULL,`offerType` TINYINT(1) NOT NULL,`isdetele` TINYINT(1) NOT NULL,`updateTime` TIMESTAMP NULL DEFAULT NULL,`successTime` INT(11) DEFAULT NULL,PRIMARY KEY (`demandId`)
) ENGINE=INNODB AUTO_INCREMENT=194 DEFAULT CHARSET=utf8; 

需求分析

需求描述中共需要三个字段排序 发货地点 取货方式 发布时间 其中 发货地点首先同城其次不同城排序,发布时间降序排序 取货方式排序规则比较
复杂,它依赖与发货地点 同城时 以“上门取件 > 快递 > 其他”进行排序 非同城时以“快递>上门取件>其他”排序。
此时简单的以 order by 字段一 desc , 字段一 desc ,字段一 desc 进行排序已经不能实现这个需求了。
我们就需要将不同维度进行组合,将不同条件下的维度进行合并成一个统一的维度,划分权重,然后排序,就能很方便的实现这个需求,
经分析,该需求下发货地点,取货方式维度权重划分如下:

  同城&&上门    权重 5同城&&快递    权重 4同城&&其他    权重 3非同城&&快递   权重 2非同城&&上门   权重 1非同城&&其他   权重 0

这样排序时就可以这样写,以权重降序就行了

-- logistics  3 上门 2 快递   1 其他
SELECT
(CASE   WHEN s.area = 1002000000 AND s.logistics = 3 THEN 5 WHEN s.area = 1002000000 AND s.logistics = 2 THEN 4WHEN s.area = 1002000000  AND s.logistics = 1 THEN 3WHEN   s.logistics = 2 THEN 2 WHEN   s.logistics = 3 THEN 1 WHEN   s.logistics = 1 THEN 0 END) weights,
s.area,s.logistics,s.updatetime ,s.*
FROM t_orders ORDER BY weights DESC  ,updatetime DESC , orderId DESC LIMIT 0,20;

查询结果如图

后文

我在上面sql排序的时候除了用需求中提的三个维度外,还用了商品表的主键排序,这么做的主要原因是为了避免当
order by的字段有多个行都有相同的值,mysql是会随机的顺序返回查询结果的问题具体可看
以下文章
Mysql order by与limit混用陷阱


数据库多维度order by 排序分析相关推荐

  1. alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)

    alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...

  2. Order By 排序条件中带参数的写法(Oracle数据库、MyBatis)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. sortWay 是参数. 当sortWay  为 llpx 就 ORDER BY FORMAT AS ...

  3. mysql数据库varchar的区别_MySQL数据库char与varchar的区别分析及使用建议

    在数据库中,字符 型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用.在字符型数据中,用的最多的就是 Char与Varchar两种类型.前面的 ...

  4. mysql单列去重复group by分组取每组前几条记录加order by排序

    <div class="post"><h1 class="postTitle"><a id="cb_post_title ...

  5. 使用order by排序判断返回结果的列数,order by排序判断字段数原理详解

    「作者主页」:士别三日wyx order by排序猜解列数原理详解 一.order by的两种使用方式 1)按照字段名排序 2)按照索引排序 二.order by怎么判断字段数? 1)正常的排序 3) ...

  6. SQL Server数据库迁移–将数据库克隆到另一个排序规则

    Database migration is a vital task in any environment, complex or otherwise. Seamless migrations are ...

  7. mybatis多字段排序_解决mybatis中order by排序无效问题

    1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  8. order by排序出现问题

    我们使用order by对字段进行排序的时候,我们发现排完后并不是按照我们要求的进行升序或者降序,出现排序错误: 例如:select * from app_mobile_device lo order ...

  9. 数据库——《对数据进行排序》

    这是接着上面的文献第三篇文献,而这篇文献讲的是数据库里面对数据进行排序的文献总结,使用 SELECT 语句从表中查询数据时,不保证结果集中的行顺序.这意味着SQL Server可以返回具有未指定行顺序 ...

最新文章

  1. 命令行是你的至交好友
  2. Michael-Scott非阻塞队列(lock-free)算法的C实现
  3. 2020-11-09
  4. Base64编码解码与实现
  5. 戴姆勒:停止内燃机研发 马斯克:欢迎进群!
  6. 关于量子计算机的科学论文,量子计算机论文,关于科学家尝试用量子计算机创造时间旅行论文范文-毕业论文网...
  7. Linux配置nginx打开报404,Linux下Nginx配置404页面的方法
  8. 服务器做jsp网站教程视频,linux jsp服务器 视频教程
  9. 360 极速模式 html,360浏览器极速模式怎么开
  10. ce修改植物大战僵尸之修改阳光值
  11. 计算机职称photoshop,职称计算机考试photoshop核心通关技巧
  12. 2019年宁波顶岗实习
  13. Ehcache二级缓配置永不过期,缓存失效问题 ---- 原因没有加载ehcache.xml配置文件,加载了默认的ehcache-failsafe.xml配置文件
  14. C/C++动态申请空间方式
  15. 计算机系统运行太慢,如何解决电脑运行速度慢
  16. Unity Shader学习:动态模糊(shutter angle方式)
  17. 记一次asp+mssql的注入和命令执行(已脱敏)
  18. 母版页(布局页)视图
  19. 毕业设计 基于stm32的智能快递仓库环境监控系统 - 物联网 嵌入式
  20. [转载]: 用PsTools工具执行本地/远程Windows管理任务

热门文章

  1. GNSS连续运行单参考站解决方案
  2. 诊所数字化:诊所医护人员绩效指标评估方式
  3. 记几次被恶意挖矿程序占满linux服务器cpu的经历
  4. 基于梁氏—克里曼信息流的因果分析理论及应用——应用部分
  5. Advanced Archive Password Recovery下载
  6. CANFiber是什么?
  7. DHTML 大全分析
  8. 苏大计算机学院出国交流,新闻 | 2019年苏州大学国际化工作交流和推进会顺利举办...
  9. 移动端图片单指移动,双指放大缩小实现//touchmove的时候不让body滚动
  10. psychopy_免费和有用的软件– PsychoPy