代码实现:
CREATE FUNCTION `moveUpOrDown`(recordId int(11), type int(11))
RETURNS int(11)
BEGIN
DECLARE isExecute int(11);
DECLARE sort1 int(11);
DECLARE sort2 int(11);
DECLARE executeId int(11);
SELECT sort INTO sort1 FROM 表名 WHERE id=recordId;
IF type=1
THEN
SELECT count(0) INTO isExecute FROM z_label z WHERE z.sort<sort1;
IF isExecute=0 THEN RETURN -1;
ELSE
SELECT z.sort INTO sort2 FROM 表名 z WHERE z.sort<sort1 ORDER BY z.sort DESC LIMIT 1;
SELECT z.id INTO executeId FROM 表名 z WHERE z.sort<sort1 ORDER BY z.sort DESC LIMIT 1;
UPDATE 表名 SET sort=sort1 WHERE id=executeId;
UPDATE 表名 SET sort=sort2 WHERE id=recordId;
RETURN 1;
END IF;
ELSE
SELECT count(0) INTO isExecute FROM 表名 z WHERE z.sort>sort1;
IF isExecute=0 THEN RETURN -1;
ELSE
SELECT z.sort INTO sort2 FROM 表名 z WHERE z.sort>sort1 ORDER BY z.sort DESC LIMIT 1;
SELECT z.id INTO executeId FROM 表名 z WHERE z.sort>sort1 ORDER BY z.sort DESC LIMIT 1;
UPDATE 表名 SET sort=sort1 WHERE id=executeId;
UPDATE 表名 SET sort=sort2 WHERE id=recordId;
RETURN 1;
END IF;
END IF;
END
入参值:
recordId:要执行上下移操作的记录主键
type:执行类型:1-上移,2-下移
返回值:
-1:已排在最前或最末,无法执行上下移
1:执行成功
这是一个用于在数据库中实现记录上移或下移的函数。根据传入的recordId和type(1为上移,2为下移),函数首先获取当前记录的排序值,然后检查是否有足够的相邻记录进行移动。如果满足条件,函数更新相关记录的排序值,从而实现移动,并返回1表示成功。若无法执行移动,如记录已在最前或最后,函数返回-1。
4万+

被折叠的 条评论
为什么被折叠?



