大家好!我认为这不应该是一个非常困难的问题——但我对 MySQL 缺乏经验,并且一直在寻找正确的方法来做这件事。我不想最终做一些愚蠢的事情。
所以,我有一个杂货清单,我想改变它们的顺序。
我希望它看起来像这样:
id label position
-- ----- --------
81 Bread 1
82 Soup 2
83 Ham 3
84 Eggs 4
如何position
以这种方式初始化列?
position
插入新行时如何处理该字段?
我自己仍然是一个phpMyAdmin人,所以我需要把它写得很简单。
最初,我想我可以像现在一样自动增加列-希望它可以作为我的初始排序位置 - 但我显然不允许,因为只有。position
id
id
我认为一旦我初始化了位置列并为新插入的行工作,移动它们应该不会太难吗?我想我会做一个“交换”操作,将position
任意两行的字段交换为id
.
我想一个“上移”或“下移”交换操作会抓住上面或下面的行's position
,然后做两个连续UPDATE..
的 's 来交换position
's。我还不够酷,无法在一个查询中简单地弄清楚如何做到这一点(如果可能的话?),所以我将从 PHP 中执行多个查询来以蛮力完成此任务。
我正在显示这样的购物清单:
SELECT * FROM groceries WHERE 1 ORDER BY position ASC;
我希望插入这样的新行:
INSERT INTO groceries (id, label, position)
VALUES (NULL, "Instant Noodles", NULL);
如果我不能position
像“自动增量”那样自动化该字段id
,那么我应该/可以将position
字段设置为什么而不是“NULL”?如何插入与position
最后添加/最大位置+1 相同的新行?
我是否应该运行另一个查询来获取最大position
(或零)并加 1?