【问题标题】:order and change one column of database订购和更改数据库的一列
【发布时间】:2014-07-30 17:16:47
【问题描述】:

我的数据库中有一个名为position 的列用于订购。但是,当某些记录被删除时,顺序就会变得混乱。我想在表更改时重新排序此列(可能使用触发器)。

位置(旧)-> 位置(新) 1 1 3 2 7 3 8 4

像这样。 我认为即使在位置(旧)中也不存在相等的数量,因为我已经在 PHP 中附加了一些函数来在更新发生时对列重新排序。但是,当一条记录因为parent被删除而被删除时,函数将不会被调用。
感谢您的帮助!

【问题讨论】:

  • 如果您仅使用该列进行排序,则不需要在删除时更新列,因为顺序仍然是正确的。而且你会节省一些资源。

标签: mysql sql


【解决方案1】:

如果您仅使用列进行排序,则不需要在删除时更新列,因为顺序仍然是正确的。而且你会节省一些资源。

但如果你真的需要按顺序更新,看看这个答案:

updating columns with a sequence number mysql

我相信(正如 scrowler 所写)在这种情况下,更好的方法是在应用程序删除父记录之后从应用程序更新行。

【讨论】:

  • SET @rank:=0; update T set position=@rank:=@rank+1 order by position
  • 这样?我需要更新,因为这将显示在页面上。
【解决方案2】:

如果您决定在应用程序中更新它,那么...

如果 position = n 被删除,你的逻辑应该设置 position = position - 1 where position > n

请注意,这仅在您从应用程序中一次删除一条记录并且假设在触发删除之前数据已经按顺序删除之前才有效

【讨论】:

  • 是的。我已经这样做了,但有时记录会被删除,因为它的相关记录被删除了。我有几张桌子,其他桌子会影响这张桌子。在这种情况下,我无法触发我的功能,并且可能会删除多个记录
  • 如果在触发器中需要它,那么在父记录的触发器中调用更新查询呢?
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 2018-09-09
  • 2019-07-18
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多