思路:
1.在数据库中对要进行排序那张表新增一个sort字段用于排序。
2.每当新增一条记录时,sort的值都会在上一条的记录上进行+1。即每次新增记录时,先查出已存在的sort值最大的那条记录,然后新增记录的sort值为该记录的sort的值+1。
3.列表向上移动的时候查询出当前数据的上一条数据的sort值,两者交换sort值,同理向下移动的时候,查询出下一条数据的sort值,两者交换。
SQL
上一条数据的sort值
<select id="selectColumnUpById" parameterType="Long"
resultMap="ColumnResult">
SELECT t.id,t.sort
FROM t_osm_column t
WHERE sort < #{sort}
and t.status != 0
and pid = '0'
ORDER BY sort DESC limit 1
</select>
下一条数据的sort值
<select id="selectColumnDownById" parameterType="Long"
resultMap="ColumnResult">
SELECT t.id,t.sort
FROM t_osm_column t
WHERE sort > #{sort}
and t.status != 0
and pid = '0'
ORDER BY sort ASC limit 1
</select>
Controller
(查2遍)
/**
* 上移
*
* @param id
* @return
*/
@GetMapping("/up/{id}")
@ResponseBody
public AjaxResult upMove(@PathVariable(“id”) String id) {
Column columnThis = columnService.selectColumnById(id);
Column columnThissss = columnService.selectColumnById(id);
Column columnchange = columnService.selectColumnUpById(columnThis.getSort());
if (columnchange != null) {
columnchange.setUpdateTime(new Date());
columnThis.setUpdateTime(new Date());
columnThis.setSort(columnchange.getSort());
columnService.updateColumnSort(columnThis);
columnchange.setSort(columnThissss.getSort());
columnService.updateColumnSort(columnchange);
}
return AjaxResult.success();
}
/**
* 下移
*
* @param
* @return
*/
@GetMapping("/down/{id}")
@ResponseBody
public AjaxResult downMove(@PathVariable("id") String id) {
Column columnThis = columnService.selectColumnById(id);
Column columnThissss = columnService.selectColumnById(id);
Column columnchange = columnService.selectColumnDownById(columnThis.getSort());
if (columnchange != null) {
columnchange.setUpdateTime(new Date());
columnThis.setUpdateTime(new Date());
columnThis.setSort(columnchange.getSort());
columnService.updateColumnSort(columnThis);
columnchange.setSort(columnThissss.getSort());
columnService.updateColumnSort(columnchange);
}
return AjaxResult.success();
}
总结
理清思路,查询到上一条下一条数据的sort