在MySQL中,我有一个包含名称,ID,位置和内容值的表。 通过id查询将内容加载到php中的页面上。该位置在php中用于创建动态菜单,菜单项按位置值递增。
例如,假设有3行,每行的位置值为1,2或3。 我正在尝试构建一个表单,以允许用户更改菜单,项目的位置或添加新的表单。因此,如果位置3中的行想要更改为位置值1,那么2需要变为3并且1需要变为2.或者如果添加新项目,则其采取的位置以及其下方的所有位置都需要向上移动价值。
接近这个的最佳方法是什么? 任何建议,将不胜感激。
答案 0 :(得分:1)
如果您添加新项目,请首先更新position
值等于或等于的所有项目:
UPDATE MenuItems SET position = position + 1 WHERE position >= newItemPosition;
如果您要更新 - 只更新位置高于higherItemPosition的项目(它们只会切换位置)。
UPDATE MenuItems SET position = position - 1 WHERE position = higherItemPosition;
如果将newItemPosition更新为更低的值,我会这样做:
UPDATE MenuItems SET position = position + 1 WHERE position = lowerItemPosition;
答案 1 :(得分:0)
我想到了两个想法:
将菜单作为AJAX加载div,然后对更改作出反应并重新加载div,这意味着您可以重新运行SQL
将答案加载到javascript数组中,并以那种方式呈现它们,然后再使用拖动更改功能。
答案 2 :(得分:0)
在我们使用查询群集数据库之前,创建覆盖位置字段的索引(例如主键),每次更改时使用索引条目更新多行,依此类推,让我们考虑以下内容:
大多数情况下,这些案例可以通过更简单,实用的方法解决,对于作为程序员来说,这也会更容易。如果菜单不会太长并且您每次需要阅读它时可能都需要它,为什么不将它保存为程序中的列表(任何类型的项目),并使用任何方法对其进行序列化(例如JSON或Python Pickle)在将其作为带有文本字段的单行存储在数据库中之前?如果菜单在列表中,重新排序其元素将非常简单,菜单的读取操作将要求数据库的单行SELECT,并且写入操作将需要单个UPDATE,而无需保持更新位置字段