我有一个数组,它给了我一个表中不同概念的顺序。因为它是一个数组,所以它以0开头。我有不同的选项来存储概念的顺序。我的问题是:
-
让MySql表的id从0开始是正确的吗?如果是这样,这将是最简单的选择
-
如果不是,我可以让数组从1开始吗?
-
第三种选择是创建一个仅用于存储订单的列。当用户创建一个新项目时,这会产生一个新问题。
$order = $_GET['order'];
print_r ($order); // this gives: Array ( [0] => first [1] => second [2] => third )
foreach($order as $key => $value) {
mysqli_query($con,"UPDATE principal
SET concept = $value
WHERE id = $key");
}
如果我理解正确的话,您显然希望将同一列用于两个完全不同的目的:
- 唯一标识行
- 存储其显示顺序
虽然这可能是可以做到的,但在我看来,这是令人困惑的,很难维护。从设计的角度来看,最好使用两列。它更简洁,并且当您需要设置不同的顺序时,它不会强制您更新所有链接表中的键。
关于AUTO_INCREMENT
特性,它是一种机制,旨在生成唯一的递增无意义的数字。它主要是为代理键设计的,它不允许像重用值这样简单的事情。
你的其他问题:
让一个MySql表的id从0开始是正确的吗?
这没有什么错(我实际上现在这样做,然后),但MySQL有一个功能,使它很难做到:NO_AUTO_VALUE_ON_ZERO
如果不是,我可以让数组从1开始吗?
如果你输入数组:
$foo = array(1 => 'a', 'b', 'c', 'd');
如果你已经有了:
foreach($order as $key => $value) {
mysqli_query($con,"UPDATE principal
SET concept = $value
WHERE id = " . ($key+1));
}
$key = 0;
foreach($order as $value) {
$key++;
mysqli_query($con,"UPDATE principal
SET concept = $value
WHERE id = $key");
}
foreach(array_values($order) as $key => $value) {
mysqli_query($con,"UPDATE principal
SET concept = $value
WHERE id = " . ($key+1));
}
// ...
让MySql表的id从0开始是正确的吗? - NO
如果不是,我可以让数组从1开始吗? - YES
MySql不接受2个自增列。 -你应该改变你的数据库设计,以便你可以关联主/外部数据。
现在我不知道你的确切要求是什么,但是你应该把数据分成两个不同的表,在两个表中有一个共同的列,作为两个表之间的主键/外键。
如果你想从1开始一个数组id,使用
<?php
$arr = array("a","b","c");
array_unshift($arr,"");
unset($arr[0]);
print_r($arr);