开发者社区> 问答> 正文

使用SQL根据单个记录的更改对多个记录进行更改?mysql

我有一张食物表。他们有一个“位置”字段,表示应该在列表中显示的顺序(listID是他们所在的列表,我们不想对另一个列表上的项目重新排序)。

+--id--+--listID--+---name---+--position--+ | 1 | 1 | cheese | 0 | | 2 | 1 | chips | 1 | | 3 | 1 | bacon | 2 | | 4 | 1 | apples | 3 | | 5 | 1 | pears | 4 | | 6 | 1 | pie | 5 | | 7 | 2 | carrots | 0 | | 8,9+ | 3,4+ | ... | ... | +------+----------+----------+------------+ 我希望能够说出“将梨移到切屑之前”,这涉及将梨的位置设置为位置1,然后将其之间的所有位置增加1。

+--id--+--listID--+---name---+--position--+ | 1 | 1 | cheese | 0 | | 2 | 1 | chips | 2 | | 3 | 1 | bacon | 3 | | 4 | 1 | apples | 4 | | 5 | 1 | pears | 1 | | 6 | 1 | pie | 5 | | 7 | 2 | carrots | 0 | | 8,9+ | 3,4+ | ... | ... | +------+----------+----------+------------+ 这样我所要做的就是SELECT name FROM mytable WHERE listID = 1 ORDER BY position以正确的顺序获取所有食物。

是否可以通过单个查询执行此操作?请记住,一条记录可能在列表中上移或下移,并且该表包含多个列表的记录,因此我们需要隔离listID。

我对SQL的了解非常有限,因此,现在我唯一知道的方法就是SELECT id, position FROM mytable WHERE listID = 1 AND position BETWEEN 1 AND 5可以使用Javascript(node.js)将位置5更改为1,并将所有其他位置+1递增。然后更新我刚刚更改的所有记录。

只是在我每次尝试阅读SQL内容时,每个人都一直在说以避免多种查询,并避免进行同步编码和类似的事情。

谢谢

展开
收起
保持可爱mmm 2020-05-17 20:31:14 924 0
1 条回答
写回答
取消 提交回答
  • 这需要更新许多记录的复杂查询。但是,对数据进行小的更改可能会改变事情,因此可以通过仅修改一条记录的简单查询来实现。

    UPDATE my_table set position = position*10; 在过去,许多系统上的BASIC编程语言都有行号,因此鼓励使用spagetti代码。许多人写的不是功能,而是功能GOTO line_number。如果您按顺序对行进行编号并且必须添加或删除几行,则会出现真正的麻烦。人们如何解决它?通过增加10行!这就是我们在这里所做的。

    因此,您想让梨成为第二项吗?

    UPDATE my_table set position = 15 WHERE listId=1 AND name = 'Pears' 担心最终物品之间的间隙会在多次重新排序后消失吗?无所畏惧

    UPDATE my_table set position = position*10; 时。来源:stack overflow

    2020-05-17 20:46:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

相关镜像