Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL行排序:如何设置并使用'position'列进行行排序?_Php_Mysql_Sql_Sql Insert - Fatal编程技术网

Php MySQL行排序:如何设置并使用'position'列进行行排序?

Php MySQL行排序:如何设置并使用'position'列进行行排序?,php,mysql,sql,sql-insert,Php,Mysql,Sql,Sql Insert,大家好!我认为这应该不是一件很难的事情——但是我对MySQL缺乏经验,并且一直在寻找正确的方法。我不想最后做傻事 所以,我有一个杂货项目的清单,我想改变他们的顺序。 我希望它看起来像这样: 如何以这种方式初始化position列? 插入新行时如何处理位置字段? 我自己还是一个博士生,所以我需要简单地写下来 起初,我想我可以像id一样自动增加position列,希望它能作为我的初始订购位置,但我显然不被允许,因为只有id是 我认为,一旦初始化了position列并处理新插入的行,将它们四处移动应该

大家好!我认为这应该不是一件很难的事情——但是我对MySQL缺乏经验,并且一直在寻找正确的方法。我不想最后做傻事

所以,我有一个杂货项目的清单,我想改变他们的顺序。 我希望它看起来像这样:

如何以这种方式初始化position列? 插入新行时如何处理位置字段? 我自己还是一个博士生,所以我需要简单地写下来

起初,我想我可以像id一样自动增加position列,希望它能作为我的初始订购位置,但我显然不被允许,因为只有id是

我认为,一旦初始化了position列并处理新插入的行,将它们四处移动应该不会太困难吧?我想我会做一个交换操作,通过id交换任意两行的位置字段。 我想象一个上移或下移交换操作将抓住位置上方或下方的行,然后连续执行两次更新…以交换位置。如果可能的话,我还没有足够的冷静去理解如何在一个查询中完成这一点,所以从PHP开始,我将使用蛮力来完成多个查询

我正在显示杂货清单,如下所示: 从杂货店中选择*,其中按职位ASC订购1份

我希望插入像这样的新行:

如果我不能像id的自动递增那样自动生成位置字段,那么我应该/可以将位置字段设置为什么,而不是“NULL”?如何插入位置与上次添加/最大位置+1相同的新行?
我是否应该运行另一个查询来获取最大位置或零并添加1?

由于您只能在表中设置一个自动增量列,因此可以使用INSERT INTO…SELECT语句来增加位置的最大值

INSERT INTO groceries (label, position) 
SELECT "Instant Noodles", COALESCE(MAX(position),0) +1
FROM groceries;

因为在一个表中只能设置一个自动增量列,所以可以使用INSERT INTO…SELECT语句来增加位置的最大值

INSERT INTO groceries (label, position) 
SELECT "Instant Noodles", COALESCE(MAX(position),0) +1
FROM groceries;

JW向您展示了如何为新行提供最高值。另一种方法是将默认值设置为0。这为字段提供了一个工作量较小的值。

JW演示了如何为新行提供最高值。另一种方法是将默认值设置为0。这使字段的工作量减少。

很漂亮!正是我要找的!非常感谢。美丽的正是我要找的!非常感谢。
INSERT INTO groceries (label, position) 
SELECT "Instant Noodles", COALESCE(MAX(position),0) +1
FROM groceries;