繁体   English   中英

MySQL中冒泡排序的替代方法

[英]Alternative to bubble sort in MySQL


问题实际上很可能出在这里,我不是在问google(或stackoverflow)正确的问题,但是由于这个简单的事情使我发疯。 很抱歉发布了很长时间,但是想弄清楚情况。

我有一个记录ID,person_name,优先级的mysql表

ID和person_name的含义不言而喻,优先级用于对记录降序排序-最高=最高优先级。

我有以下记录,为简单起见,ID对应于排序顺序:

1, "John A", 3
2, "John B", 2
3, "John C", 1
4, "John D", 0

在我从其他计算机的导出中导入记录之前,这一直很好,突然之间有两个优先级相同的记录。

1, "John A", 3
2, "John B", 2
3, "John C", 1
5, "John E", 1
4, "John D", 0

现在按优先级DESC,名称ASC,ID3和ID5对记录进行排序时,将按字母顺序排序,这与情况不符。 如果用户希望将ID5的优先级更改为高于ID2,我不能仅仅增加优先级,因为它会匹配ID2,并且由于字母顺序,ID5会显示在ID2以下。

问题:是否有比这更有效的方法,或者是完全不同的方法:

  1. NEAREST_PRIORITY =确定具有更高优先级的最近记录的优先级
  2. 将优先级> NEAREST_PRIORITY的所有记录的优先级提高1
  3. 设置当前记录优先级= NEAREST_PRIORITY + 1

如果有多个带有NEAREST_PRIORITY的记录,这实际上将不能很好地工作...

感谢您阅读冗长的帖子和任何想法。

有趣的问题,这取决于您如何解决导入记录的优先级冲突。 我们假设,如果发生冲突,则导入的记录将具有优先权。 导入之前,将所有优先级乘以2,然后导入新记录,但将其优先级乘以2,并在导入期间加1。 现在您将拥有:

1, "John A", 6
2, "John B", 4
5, "John E", 3
3, "John C", 2
4, "John D", 0

如果您需要保持优先级连续,或者需要执行很多导入操作,则必须做一些工作来重置数字,但是至少顺序是正确的。

您可以对发生冲突的优先级更改使用相同的解决方案,将其乘以2,然后将新优先级设置为新优先级+1。因此,将ID4移至ID5之前,其新优先级将为(3 * 2)+ 1和您将拥有:

1, "John A", 12
2, "John B", 8
4, "John D", 7
5, "John E", 6
3, "John C", 4

同样,如果您这样做,事情将会迅速升级,因此您可能想要重置数字。 答案显示了您可以调整的顺序编号示例。

我在考虑链接列表并实现优先级表,例如

{ id, userId, comesAfterUserId, comesBeforeUserId }

然后,任何优先级移动都只能更改两个条目。 但是我不知道如何直接在SQL中对它进行排序,因此您必须在应用程序中进行处理。 我觉得这是一个更优雅的解决方案,但乘以2的倍数也应该有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM