【问题标题】:How can I change order values in a table when inserting a new row with a higher order value?插入具有更高顺序值的新行时,如何更改表中的顺序值?
【发布时间】:2019-04-09 22:35:59
【问题描述】:

使用 php 和 mysqli,我有一个分类表,用于对产品进行分组并控制它们在我的目录中显示的顺序。字段“ord”是一个 int,其值控制这些产品类别的显示顺序。插入新类别时,我想将剩余类别从新类别向下重新排序并更新表,然后插入新类别而不重复“ord”值。

有 11 个类别。我想插入我的新类别,它的“ord”值为 5。显然,我需要为每个“ord”值 6 - 11 添加 1 以重新排序我的目录。不知道该怎么做。我不擅长使用数组,但我认为某种带有 UPDATE 表的 foreach array[$key][] + 1 会起作用。我不清楚如何创建数组。

对此真的没有任何可行的想法......

Category ord=1: Site Licensing
Category ord=2: PICC Insertion Training
Category ord=3: Ultrasound Training

新类别:ord 2:会员订阅

Category ord=1: Site Licensing
Category ord=2: Membership Subscriptions
Category ord=3: PICC Insertion Training
Category ord=4: Ultrasound Training

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以在执行INSERT 之前简单地更新表格。通过首先更新现有数据,您可以为新条目留出空间。

    $order = $_POST['order'];
    
    $stmt = $mysqli->prepare("UPDATE `categories` set order = order + 1 where order >= ?"));
    
    $stmt->bind_param("i", $order);
    
    $stmt->execute();
    
    /** Now perform INSERT statement */
    

    【讨论】:

    • 完美。谢谢!我在等待回复时一直在修修补补,实际上回答了我自己的问题。将 select 语句更改为仅包含那些等于或大于新订单值的记录得到我想要的记录。然后进行更新,然后插入。我想多了,让这件事变得更难了。
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多