说到排序,想必大家都知道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 &lt; (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 &gt; (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数据进行记录的随意排序的更多相关文章

  1. 在spark中操作mysql数据 ---- spark学习之七

    使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...

  2. ScalikeJDBC,操作mysql数据,API

    ScalikeJDBC,操作mysql数据,API 一.构建maven项目,添加pom.xml依赖 二.resource文件下创建application.conf文件,并配置以下内容 三.操作mysq ...

  3. JDBC操作MySQL数据

    对原始jdbc进行封装 package com.utils; import java.sql.Connection; import java.sql.DriverManager; import jav ...

  4. java操作MySQL数据事务的简单学习

    在执行数据更改操作前使用数据库连接对象调用setAutoCommit方法(conn.setAutoCommit(false)),其参数true或false区别: true:sql命令的提交(commi ...

  5. navicat查看mysql数据表记录数不断变化

    在使用navicat进行数据库管理的时候,在查看表对象的时候会发现,每次刷新,数据表的记录数不断变化,尤其是大表. 对于100万的数据经常会显示九十几万,当然通过count(*)出来的数据是正确的. ...

  6. PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

  7. python操作mysql数据-执行语句返回值直接返回字典类型

    fetchall()将结果放在二维数组里面,每一行的结果在元组里面 import pymysql def export(table_name): conn =pymysql.connect(host ...

  8. python 操作mysql数据库存

    代码: 说明:由于我本机没有安装数据库,数据库是在远程访问的,故地址不是localhost # __author__ = 'STEVEN' import pymysql host = '10.1.1. ...

  9. MySql 触发器同步备份数据表记录

    添加记录到新记录表 DELIMITER $$ USE `DB_Test`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `InsertOPM_Al ...

随机推荐

  1. Hdu Can you find it?(二分答案)

    Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others) P ...

  2. 数据结构实验之栈与队列三:后缀式求值(SDUT 2133)

    题解:把每一步计算的答案再存在栈里面,直到计算结束. 如果是操作数 那么直接入栈:如果是运算符,那么把栈里面最顶部的两个操作数拿出来进行运算,运算结果再放入到栈里面,计算完所有的(#之前的长度位len ...

  3. linux安装过程中遇到的一些问题总结

    后面持续更新 1.安装之后查看显示一直连不上网 vim /etc/sysconfig/network-scripts/ifcfg-eth0 然后应该就可以上网了 2.linux窗口无法适应虚拟机窗口 ...

  4. Babel7知识梳理

    Babel7 知识梳理 对 Babel 的配置项的作用不那么了解,是否会影响日常开发呢?老实说,大多情况下没有特别大的影响(毕竟有搜索引擎). 不过呢,还是想更进一步了解下,于是最近认真阅读了 Bab ...

  5. cs配合msf批量探测内网MS17-010漏洞

    第一步 Cobalt strike 派生 shell 给 MSF(前提有个beacon shell) 第二步 选择要派生的beacon,右键-->增加会话,选择刚刚配置的foreign监听器 第 ...

  6. Js中Array常用方法小结

    说起Array的方法,不免让人皱一下眉头,下面我们从增删改查角度依次来总结. 1.增 push: 将传入的参数 ,插入数组的尾部,并返回新数组的长度.不管传入参数为一个值还是一个数组,都作为插入数组的 ...

  7. 你真的会用go语言写单例模式吗?

    最近在学习Golang,想着可以就以前的知识做一些串通,加上了解到go语言也是面向对象编程语言之后.在最近的开发过程中,我碰到一个问题,要用go语言实现单例模式.本着“天下知识,同根同源”(我瞎掰的~ ...

  8. C之输入输出

    %d - int%ld – long (long int)%lld - long long%hd – short 短整型 (half int) %c - char%f - float%lf – dou ...

  9. .md 即 markdown 文件的基本常用编写语法

    0. 前言 Markdown 是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式.现在的项目都使用了 git 仓库,再加上远程仓库 github 托管,那就难免要写一些 ...

  10. computer5 environment

    luo@luo-All-Series:~/MyFile/Anaconda3$ luo@luo-All-Series:~/MyFile/Anaconda3$ luo@luo-All-Series:~/M ...