MySQL方法来维护顺序编号;顶部n“;列表
我在实现这一点上遇到了困难排名是用户给定的排名,可随时更改,并可随时添加和删除项目。问题是我希望列组是唯一的,并且总是在1和n之间排序(n是表中的行数)。即:如果用户将第5项的排名更改为2。前一个等级2项目应变为等级3,前一个等级3变为等级4,前一个等级4变为新的等级5。类似地,对于delete和create,所有较大或较小的排序项都应该在相应的操作中向下或向上级联一个 是否有某种模式或技术可以轻松实现这一点 谢谢你的帮助MySQL方法来维护顺序编号;顶部n“;列表,sql,mysql,Sql,Mysql,我在实现这一点上遇到了困难排名是用户给定的排名,可随时更改,并可随时添加和删除项目。问题是我希望列组是唯一的,并且总是在1和n之间排序(n是表中的行数)。即:如果用户将第5项的排名更改为2。前一个等级2项目应变为等级3,前一个等级3变为等级4,前一个等级4变为新的等级5。类似地,对于delete和create,所有较大或较小的排序项都应该在相应的操作中向下或向上级联一个 是否有某种模式或技术可以轻松实现这一点 谢谢你的帮助 Michael您可以将项目保存在链接列表中: CREATE TABLE
Michael您可以将项目保存在链接列表中:
CREATE TABLE item ( link MEDIUMINT UNSIGNED PRIMARY KEY NOT NULL,
title TEXT NOT NULL,
rank INT UNSIGNED NOT NULL AUTO_INCREMENT,
notes TEXT
) ENGINE = INNODB;
然后像这样查询:
id parent title notes
1 0 Title 1 Note 1
2 1 Title 2 Note 2
3 2 Title 3 Note 3
4 3 Title 4 Note 4
在此设计中,移动项目(甚至项目块)只需要三次UPDATE
操作(您更改要移动的项目、要移动到的项目和要从中移动的项目的父项)
有关详细信息,请参阅我博客中的这篇文章:
CREATE TABLE item ( link MEDIUMINT UNSIGNED PRIMARY KEY NOT NULL,
title TEXT NOT NULL,
rank INT UNSIGNED NOT NULL AUTO_INCREMENT,
notes TEXT
) ENGINE = INNODB;
然后像这样查询:
id parent title notes
1 0 Title 1 Note 1
2 1 Title 2 Note 2
3 2 Title 3 Note 3
4 3 Title 4 Note 4
在此设计中,移动项目(甚至项目块)只需要三次UPDATE
操作(您更改要移动的项目、要移动到的项目和要从中移动的项目的父项)
有关详细信息,请参阅我博客中的这篇文章: