Php 如果数字缺失,则向下移动数字
我有一个数据库,问题编号在1到21之间,都有答案/值等。 但我希望能够删除例如问题7。 如果我删除其他数字之间的问题,问题编号将自动从1-21变为1-20,而不是1-6,8-21。 这可能吗?我试着在网上搜索,但找不到我要找的东西 致以亲切的问候Php 如果数字缺失,则向下移动数字,php,mysql,numbers,Php,Mysql,Numbers,我有一个数据库,问题编号在1到21之间,都有答案/值等。 但我希望能够删除例如问题7。 如果我删除其他数字之间的问题,问题编号将自动从1-21变为1-20,而不是1-6,8-21。 这可能吗?我试着在网上搜索,但找不到我要找的东西 致以亲切的问候 我该怎么把它缩短?我知道可以用innerjoin实现,但我不知道如何正确使用它,因为我不清楚解释 `$sql = "DELETE FROM insertquestion WHERE nummer='".$questionNumber."'"; $
我该怎么把它缩短?我知道可以用innerjoin实现,但我不知道如何正确使用它,因为我不清楚解释
`$sql = "DELETE FROM insertquestion
WHERE nummer='".$questionNumber."'";
$deleteFromQuestion = $db->prepare($sql);
$deleteFromQuestion->execute();
$updateSql = "UPDATE insertquestion SET nummer = nummer - 1 WHERE nummer >= '".$questionNumber."'";
$updateSql = $db->prepare($updateSql);
$updateSql->execute();`
另一个时间,但使用另一个表(
vraag
)您可以使用触发器执行此操作参考:
或者使用更新查询设置值(但是,如果行数很大,则此方法成本较高)
对于这个要求,可能有很多方法。其中之一就是你可以通过触发来实现。编写一个after delete触发器,该触发器将更新表中的所有问题编号
CREATE TRIGGER tblquestion_delete AFTER DELETE on tblquestion
FOR EACH ROW
BEGIN
UPDATE tblquestion
SET qno = qno - 1
WHERE qno > old.qno;
END
另一种方法是,您可以在删除查询之后立即编写此查询
$sql = "DELETE FROM insertquestion WHERE number='".$questionNumber."' ;
UPDATE tblquestion SET number = number - 1 WHERE number > '".$questionNumber."' ; ";
更新表集qnum=qnum-1,其中qnum>7
在代码中使用此查询或在删除后触发是否有任何特定原因需要在数据库级别执行此维护?当您在php代码中输出问题时,您可以应用任何类型的编号。您需要此功能的地方….谢谢@splash58,休息后我将尝试一下,并对结果进行评论。为了方便起见,我没有删除这个问题,但是如果我想删除这个问题,我必须每次都调整编号,你应该在删除后添加一个触发器,你可以在其中再次更新所有的问题编号。我该如何缩短它?我知道可以用innerjoin实现,但我不知道如何正确使用它,因为我不清楚解释$sql=“从insertquestion中删除,其中numer=”“$questionNumber。””$deleteFromQuestion=$db->prepare($sql)$deleteFromQuestion->execute()$updateSql=“UPDATE insertquestion SET nummer=nummer-1,其中nummer>=”“$questionNumber.”$updateSql=$db->prepare($updateSql)$updateSql->execute()
另一次,但是对于表vraag
,因为表中的行数较少,所以应该不会有问题。只有当行数相对超过一百万且更新更频繁时才会出现问题。通常情况下,一秒钟内就有一千多个请求@TheeKopje,而您使用的方法实际上更好。但是,我会在一个事务中添加这两个查询@Theekopje你是什么意思?我的意思是如何缩短代码,而不是复制粘贴和更改名称。我很好奇该怎么做。我知道可以用innerjoin完成,但我不理解正确的解释谢谢你,Andrews,我现在就这样做了,它工作得非常完美<代码>$db->beginTransaction()$db->exec(“从insertquestion中删除,其中numer='”“$questionNumber.”)$db->exec(“更新insertquestion SET nummer=nummer-1,其中nummer>=”“$questionNumber.”)$db->commit()非常感谢你。祝您有愉快的一天,我是否也应该在更新之前添加$sql?还是会这样?
$sql = "DELETE FROM insertquestion WHERE number='".$questionNumber."' ;
UPDATE tblquestion SET number = number - 1 WHERE number > '".$questionNumber."' ; ";