Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
循环中的Mysql增量(按变量)_Mysql_Variables_Loops_Increment - Fatal编程技术网

循环中的Mysql增量(按变量)

循环中的Mysql增量(按变量),mysql,variables,loops,increment,Mysql,Variables,Loops,Increment,我正在尝试使用一个简单的MySQL查询来更新我的带有位置的表。 假设我有一个带有ID、writer\u ID和position字段的book表 我希望能够有职位从1。。。x,但按作者id。 如果我删除一条记录,我的位置将有一个间隙,这就是为什么我需要一个简单的查询来重置所有没有间隙的位置 目前,我有以下代码(可以使用),但我认为这应该更容易(可能更快) 我也可以使用PHP循环浏览我的所有记录并逐个保存,但我想这不会更好,让我向您引用以下内容: 作为一般规则,决不应将值分配给用户变量,并在同一语句

我正在尝试使用一个简单的MySQL查询来更新我的带有位置的表。 假设我有一个带有ID、writer\u ID和position字段的book表

我希望能够有职位从1。。。x,但按作者id。 如果我删除一条记录,我的位置将有一个间隙,这就是为什么我需要一个简单的查询来重置所有没有间隙的位置

目前,我有以下代码(可以使用),但我认为这应该更容易(可能更快)

我也可以使用PHP循环浏览我的所有记录并逐个保存,但我想这不会更好,让我向您引用以下内容:

作为一般规则,决不应将值分配给用户变量,并在同一语句中读取该值。你可能会得到你期望的结果,但这不是保证。涉及用户变量的表达式的计算顺序未定义,可能会根据给定语句中包含的元素而改变;此外,不能保证MySQL服务器的不同版本之间的顺序相同

因此,你尝试做事情的方式可能有效,但绝对没有保证。因此,我建议您使用PHP而不是MySQL。或者您可以在MySQL中使用。

让我向您引用以下内容:

作为一般规则,决不应将值分配给用户变量,并在同一语句中读取该值。你可能会得到你期望的结果,但这不是保证。涉及用户变量的表达式的计算顺序未定义,可能会根据给定语句中包含的元素而改变;此外,不能保证MySQL服务器的不同版本之间的顺序相同


因此,你尝试做事情的方式可能有效,但绝对没有保证。因此,我建议您使用PHP而不是MySQL。或者您可以在MySQL中使用。

为什么不使用具有以下功能的触发器:

删除行时,将大于已删除行的每个writer\u id减少1

或者用伪代码表示:

create trigger for delete...
    update book 
    set writer_id = writer_id - 1 
    where writer_id > deleted.writer_id 

为什么不使用具有以下功能的触发器:

删除行时,将大于已删除行的每个writer\u id减少1

或者用伪代码表示:

create trigger for delete...
    update book 
    set writer_id = writer_id - 1 
    where writer_id > deleted.writer_id 

如果您是按编剧id订购,为什么需要这个职位?当您已经获得writer\u id时,您只需添加另一个递增的整数,它可能是一个自动递增的intwriter\u id在这里不是一个自动递增的值@RomanKonz这其实是一个更好的方法,我没想到。谢谢man@RomanKonz,也许你想把这个“触发”的建议变成一个答案。如果你是按作者身份排序的,为什么这个职位是必要的?当您已经获得writer\u id时,您只需添加另一个递增的整数,它可能是一个自动递增的intwriter\u id在这里不是一个自动递增的值@RomanKonz这其实是一个更好的方法,我没想到。谢谢man@RomanKonz,也许你想把这个“触发”的建议变成一个答案。