操作MySQL数据进行记录的随意排序
说到排序,想必大家都知道MySQL中的“ORDER BY”这个关键词吧,使用它可以实现查询数据根据某一字段(或多个字段)的值排序,那么如何实现数据的任意排序操作呢?
其实这里我所说的“随意排序”,本质上来说是一种假象,后台SQL语句中依然使用到了ORDER BY关键词,只不过我在数据表中加入了一个字段标记序号,前台中所谓的“排序”操作实际是对记录的排序号进行交换操作而已,如下图所示:

例如有如下数据显示:

js实现部分代码:
function moveTop(id) {//上移
$.ajax({
url: '',//请求接口
type: 'POST',
data: {id: id},//需要上移的记录主键
dataType: 'json',
success: function (data) {//成功返回data
if (data.success) {
showMsg("上移成功");
setTimeout(function () {
query();
}, 1000);
} else if (data.message) {
showNote(data.message);
} else {
showNote("上移失败");
}
},
error: function () {
showNote("上移失败");
}
});
}
function moveDown(id) {//下移
$.ajax({
url: '',
type: 'POST',
data: {id: id},
dataType: 'json',
success: function (data) {
if (data.success) {
showMsg("下移成功");
setTimeout(function () {
query();
}, 1000);
} else if (data.message) {
showNote(data.message);
} else {
showNote("下移失败");
}
},
error: function () {
showNote("下移失败");
}
});
}
function moveByShowSort(id) {//根据指定的显示序号进行移动 注意:这里的序号和MySQL中记录的序号没有关系,只是页面上显示的序号
var $showSort = $("#showSort" + id);//获取想要移动到的记录显示序号
var showSort = Number($showSort.val().trim());
var total = '${pageInfo.total}';//获取记录总数
if (showSort.length === 0) {
showNote("请输入序号");
return;
} else {
if (isNaN(showSort)) {
showNote("请输入数字");
return;
}
if (showSort <= 0 || showSort > total) {
showNote("请输入1~" + total + "之间的序号");
return;
}
}
$.ajax({
url: '',
type: 'POST',
data: {id: id, showSort: showSort},
dataType: 'json',
success: function (data) {
if (data.success) {
showMsg("移动成功");
setTimeout(function () {
query();
}, 1000);
} else if (data.message) {
showNote(data.message);
} else {
showNote("移动失败");
}
},
error: function () {
showNote("移动失败");
}
});
}
后台则根据获取到的id查询对应需要交换的记录id,再根据id查询sort排序号,最后二者交换即可。
SQL语句如下(使用mybatis编写):
查询被上移交换的记录id:
<select id="getTopBannerIdById" resultType="string">
SELECT id
FROM b_banner
WHERE sort < (SELECT sort FROM `b_banner` WHERE id = #{id})
ORDER BY sort DESC
LIMIT 1
</select> 查询被下移交换的记录id:
<select id="getDownBannerIdById" resultType="string">
SELECT id
FROM b_banner
WHERE sort > (SELECT sort FROM `b_banner` WHERE id = #{id})
ORDER BY sort
LIMIT 1
</select> 查询被交换的记录id,携带输入的显示序号参数
<select id="getBannerIdByShowSort" resultType="java.lang.String">
SELECT id
FROM b_banner
ORDER BY sort
LIMIT #{showSort}, 1
</select>
改变排序号就是根据id和sort进行记录的更新操作。
操作MySQL数据进行记录的随意排序的更多相关文章
- 在spark中操作mysql数据 ---- spark学习之七
使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...
- ScalikeJDBC,操作mysql数据,API
ScalikeJDBC,操作mysql数据,API 一.构建maven项目,添加pom.xml依赖 二.resource文件下创建application.conf文件,并配置以下内容 三.操作mysq ...
- JDBC操作MySQL数据
对原始jdbc进行封装 package com.utils; import java.sql.Connection; import java.sql.DriverManager; import jav ...
- java操作MySQL数据事务的简单学习
在执行数据更改操作前使用数据库连接对象调用setAutoCommit方法(conn.setAutoCommit(false)),其参数true或false区别: true:sql命令的提交(commi ...
- navicat查看mysql数据表记录数不断变化
在使用navicat进行数据库管理的时候,在查看表对象的时候会发现,每次刷新,数据表的记录数不断变化,尤其是大表. 对于100万的数据经常会显示九十几万,当然通过count(*)出来的数据是正确的. ...
- PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)
一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...
- python操作mysql数据-执行语句返回值直接返回字典类型
fetchall()将结果放在二维数组里面,每一行的结果在元组里面 import pymysql def export(table_name): conn =pymysql.connect(host ...
- python 操作mysql数据库存
代码: 说明:由于我本机没有安装数据库,数据库是在远程访问的,故地址不是localhost # __author__ = 'STEVEN' import pymysql host = '10.1.1. ...
- MySql 触发器同步备份数据表记录
添加记录到新记录表 DELIMITER $$ USE `DB_Test`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `InsertOPM_Al ...
随机推荐
- 在Android中使用OpenGL ES进行开发第(三)节:绘制图形
一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...
- 网络1911、1912 C语言第4次作业--函数批改总结
目录 网络1911.1912 C语言第4次作业--函数批改总结 一.评分规则 二.本次作业亮点 三.本次作业存在的问题 四.助教有话说 五.得分详情 网络1911.1912 C语言第4次作业--函数批 ...
- LOJ #6669 Nauuo and Binary Tree (交互题、树链剖分)
题目链接 https://loj.ac/problem/6669 题解 Orz yyf太神了,出这种又有意思又有意义的好题造福人类-- 首先\(n\)次询问求出所有节点的深度. 考虑按深度扩展(BFS ...
- 在AspNetCore3.0中使用Autofac
1. 引入Nuget包 Autofac Autofac.Extensions.DependencyInjection 2. 修改Program.cs 将默认ServiceProviderFactory ...
- SO2O連接報錯javax.net.ssl.SSLException: Received fatal alert: protocol_version)
原文:https://blog.csdn.net/gudejundd/article/details/89640741 1.什么是TLSSSL 是“Secure Sockets Layer”的缩写,中 ...
- 在Vue文件中引用模块的相对路径“@“符号表示什么意思?
@ 的作用是在你引入模块时,可以使用 @ 代替 /src 目录,避免书写麻烦又易错的相对路径. import model from "@/common/model"; // 默认路 ...
- android在点击EditText的时候始终不弹出软件键盘
场景描述:正常情况下,当点击EditText时,软键盘会弹出来.现在的要求是当点击EditText时,弹日期选择对话框,选择的结果显示在EditText上.若不处理,当点击EditText时,软键盘和 ...
- 图解 HTTP 笔记(五)——Web 服务器
该章的主要内容是讲解与 HTTP 协作的 Web 服务器 一.用单台虚拟主机实现多个域名 基于虚拟主机的功能,可以只使用一台物理机实现多个域名的网站部署. 在互联网上,域名通过 DNS 域名解析系统可 ...
- 20190615 NACE关于采购订单的输出类型
项目已经做好的配置,我们复盘一下 一.使用NACE 进入输出控制条件: EF 采购订单,首先看->输出类型 标准是使用 nast 作为记录表 1输出类型, 2过程, 3 存取顺序,4 条件记录: ...
- [C++]多源最短路径(带权有向图):【Floyd算法(动态规划法)】 VS n*Dijkstra算法(贪心算法)
1 Floyd算法 1.1 解决问题/提出背景 多源最短路径(带权有向图中,求每一对顶点之间的最短路径) 方案一:弗洛伊德(Floyd算法)算法 算法思想:动态规划法 时间复杂度:O(n^3) 形式上 ...