bitsCN.com

IN条件结果顺序问题

项目中需要记录用户的浏览历史,我的意见是前端直接存cookie里,可是前端说cookie内容太多,要求传递id,后端返回数据,结果就产生如下的问题。

1.据前端说,url中的数组传递是无序的(其实我纳闷,为什么)

2.传递到后端的id,使用SQL语句中的in条件,但是返回的顺序却是该id的增序,而不是前端传递的id顺序

在网上找到了解决办法,原文如下:

有个场景,一个几万条记录的表,主键是 id,我想从表中取 id 为 30,20,80,40 的几条记录。

注意,30,20,80,40,是我预期的顺序,我希望 MySQL 按这样的顺序返回记录。

于是我这样写 SQL:

SELECT * FROM my_table WHERE id IN (30, 20, 80, 40);

结果是,他没有按我给的顺序返回。

怎么办?

查到了 FIELD() 函数。

FIELD(str,str1,str2,str3,...)

Returns the index (position) of str in the str1, str2, str3, ... list. Returns 0 if str is not found.

把 SQL 语句改写为:

SELECT * FROM my_table WHERE id IN (30, 20, 80, 40) ORDER BY FIELD(id, 30, 20, 80, 40);

排序过程是:

把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据。

这样的用法,会导致 Using filesort,是效率很低的排序方式。除非数据变化频率很低,或者有长时间的缓存,否则不建议用这样的方式排序。

把 MySQL 返回的结果,用 PHP 在内存中按 id 顺序重新排列,是个不错的优化方案。bitsCN.com

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql in 保持顺序_IN条件结果顺序问题_MySQL相关推荐

  1. oracle和mysql查询条件排序_Oracle数据库中ORDERBY排序和查询按IN条件的顺序输出

    ORDER BY非稳定的排序提一个问题: oracle在order by 排序时,是稳定排序算法吗? 发现用一个type进行排序后,做分页查询,第一页的数据和第二页的数据有重复 怀疑是order by ...

  2. MySQL查询时条件的顺序_mysql中查询条件的先后顺序问题?

    听一个讲座,说查询条件的顺序影响查询速度,比如一个先运行一个高门槛的条件,后低门槛,运行速度会相对快,请问有这种事么? 那么我在写thinkphp的查询语句的时候,是不是应该把高门槛的放在前面查询? ...

  3. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  4. sql语句 where 后条件执行顺序

    曾经面试时.被问到过这个问题.结合网上的知识,整理如下: 针对mysql,其条件执行顺序是 从左往右,自上而下: 针对orcale,其条件执行顺序是从右往左,自下而上.

  5. java 类型转换顺序_Java类型转换,顺序结构及条件结构,循环结构

    一.Java类型转换 转换类型: 1.自动类型转换:把小的放到大的里面 2.强制类型转换:把大的放到小的里面 3.把字符串类型转换成其他数据类型(使用对应包装类的parsexxx()方法) 同类型转换 ...

  6. mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...

    ​正文约: 4744字 预计阅读时间: 12分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 mysql┃多个角度说明sql优化,让你吊打面试官! 目录 目录 前言 正文 1.表结构优化● ...

  7. C++primer第九章 顺序容器 9.1 顺序容器概述 9.2容器库概览

    一个容器就是一些特定类型对象的集合.顺序容器(sequentialcontainer)为程序员提供了控制元素存储和访问顺序的能力.这种顺序不依赖于元素的值,而是与元素加入容器 时的位置相对应.与之相对 ...

  8. 聊一聊顺序消息(RocketMQ顺序消息的实现机制)

    本文来自:https://www.cnblogs.com/hzmark/p/orderly_message.html 当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间 ...

  9. 1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?

    初始化列表和构造函数初始化的区别是什么? 初始化和赋值对内置类型的成员没有太大的区别,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的.只有一些需要注意的事项 初始化列表一般情况如下: D ...

最新文章

  1. linux热插拔原理,.NET Core 的热插拔机制的深入探索
  2. Android自定义属性,format详解
  3. layui删除后刷新表格_LayUi前端框架删除数据缓存问题(解决删除后刷新页面内容又会显示问题)...
  4. 800多名各国院士热忱参与 第三届“科学探索奖”名单公布
  5. left join 索引失效无条件_从零开始学数据分析-mysql索引优化方案
  6. datatable把一个LIst的数据放入两个colum防止窜行的做法
  7. 微软 CEO 纳德拉痛失爱子
  8. Android SDK 开发——发布使用踩坑之路
  9. Android Studio在创建项目是一直处于building “project name”gradle project info的解决办法...
  10. javascript:document.all document.getElementsByName
  11. Extjs store用法详解
  12. Pointer Networks简介及其应用(格式化)
  13. Pigx官方文档地址
  14. 【NLP】文本情感分类
  15. Mysql 不包含某个字符
  16. 广东第二师范学院学计算机,广东第二师范学院计算机科学系党总支一行来我院调研交流...
  17. Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作
  18. 浙江大学计算机学院复试拟录取名单,浙江大学计算机学院2015年考研复试拟录名单...
  19. 固态硬盘的计算机需要进行磁盘碎片整理吗,有问有答:固态硬盘需要磁盘碎片整理吗?...
  20. adb关闭手机系统自动更新

热门文章

  1. javascript 唯一值的集合 Set对象
  2. IOS UISwitch 组件的使用
  3. java常用的缓存_java 常用缓存 - 只对肉有感觉的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 【OpenCV 例程200篇】69. 连续非周期信号的傅立叶系数
  5. 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子
  6. mysql数据库多少张表会影响性能_mysql数据库多少张表会影响性能
  7. flog和flag_FLAG:写作,英语和持续学习
  8. centos6.5装mysql好难_centos 6.5装mysql5.7
  9. 白盒测试六种方法案例分析
  10. html中的文本格式化标签+多媒体标签+关于IE浏览器兼容的问题(干货!)