如何“删除一行后更新多行”?使用PHP和MySQL

如何“删除一行后更新多行”?使用PHP和MySQL,php,mysql,Php,Mysql,很抱歉,这可能是一个愚蠢的问题,但我想得到一些帮助,以获得在我的问题上形成正确语法的逻辑。 使用的语言:PHP、MySQL 以下是场景: 我有一张名为tbl_book的桌子 +----+------+-------+------------+ | id | code | copy | date_added | +----+------+-------+------------+ | 1 | IX3V | 1 | 2018-12-09 | | 2 | IX3V | 2 | 2

很抱歉,这可能是一个愚蠢的问题,但我想得到一些帮助,以获得在我的问题上形成正确语法的逻辑。 使用的语言:PHP、MySQL

以下是场景:

我有一张名为tbl_book的桌子

+----+------+-------+------------+
| id | code |  copy | date_added |
+----+------+-------+------------+
| 1  | IX3V |   1   | 2018-12-09 |
| 2  | IX3V |   2   | 2018-12-09 |
| 4  | BN9Z |   1   | 2018-12-10 |
| 5  | BN9Z |   2   | 2018-12-10 |
| 6  | BN9Z |   3   | 2018-12-11 |
| 7  | BN9Z |   4   | 2018-12-12 |
| 8  | BN9Z |   5   | 2018-12-12 |
+----+------+-------+------------+
现在,例如,我想删除id=6。删除该行之后, 我想将所有副本集从1,2,4,5设置为1,2,3,4,其中code=BN9Z

预期产出:

+----+------+-------+------------+
| id | code |  copy | date_added |
+----+------+-------+------------+
| 1  | IX3V |   1   | 2018-12-09 |
| 2  | IX3V |   2   | 2018-12-09 |
| 4  | BN9Z |   1   | 2018-12-10 |
| 5  | BN9Z |   2   | 2018-12-10 |
| 7  | BN9Z |   3   | 2018-12-12 |
| 8  | BN9Z |   4   | 2018-12-12 |
+----+------+-------+------------+
此问题适用于我的项目,我很乐意选择相关的解决方案。谢谢。

如果您知道要删除的行的代码值和副本,您可以使用此选项:

UPDATE `tbl_book`
SET `copy` = `copy`-1
WHERE `code` = `BN9Z` and `copy` > 3
更新

下面的一些代码将删除这些行,并在以后按id行进行更新

mysql函数已折旧,并已从当前的7版PHP中删除。请改用mysqli函数

include("db_connect.php");  //  Update to use mysqli functions instead of mysql functions.

$get_to_delete_no = "3";
//  Get the info from the row to be deleted
$rowinfo = mysqli_query("SELECT `id`,`code`,`copy` FROM `tbl_book` WHERE `id` = $get_to_delete_no");
if($rowinfo !== false) {
    $rslt = mysqli_query("DELETE FROM `tbl_book` WHERE `id` = $get_to_delete_no");
    if($rslt !== false) {
        $rslt = mysqli_query("UPDATE `tbl_book` SET `copy` = `copy` - 1 WHERE `copy` > ".$rowinfo[0][`copy`]." AND `code` = ".$rowinfo[0][`code`]);
    }
}

当你能做到这一点时,它会涉及更新几行。你可以考虑只删除具有最大拷贝值的行。我不能删除,我忘了放“DATEYAUD”列。如果要删除它,就好像添加新的拷贝。PS。我会更新表。当我把这个词冲过去时,数据库触发器就出现在我的头上。斯隆到B。e一个很好的建议@Markus如果使用InnoDB作为表引擎,你应该在一个事务中同时执行这两个qeuries,因为可能存在竞争条件。@RaymondNijland先生。我对如何执行仍然很困惑。先生,你能帮我吗?@Sloather-似乎我无法构建它。你能帮我吗?我做了以下几件事:includedBu connect.php;$get_to_delete_no=3;mysql_queryDELETE FROM tbl_book其中id='6';$sql=mysql_querySELECT*FROM tbl_book;而$row=mysql_fetch_数组$sql{$get_copy=$row[copy];mysql_queryUPDATE tbl_book SET copy='$get_copy'-1其中code='BN9Z'和copy>'get_to_delete_no'}复制列上的其余部分似乎变成了0。您能重建我的吗?谢谢。麻烦您了。