我有一个数组,它给出了我在表格中有不同概念的顺序。因为它是一个数组,所以它从0开始。我有不同的选项来存储概念的顺序。我的问题是:
这是否正确使MySql表的id以0开头?如果是这样,那将是最简单的选择
如果没有,我可以让数组以1开头吗?
第三个选项是创建一个列来存储订单。当用户创建新项目时,这会产生新问题。由于MySql不接受2个自动增量列。
$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");
}
答案 0 :(得分:1)
这是否正确使MySql表的id以0开头? - 否
如果没有,我可以让数组以1开头吗? - 是
由于MySql不接受2个自动增量列。 - 您应该更改数据库设计,以便可以将主要/外来数据联系起来。
现在我不知道你的具体要求是什么,但你应该将数据分成两个不同的表,两个表中都有一个公共列,它们将作为两者之间的主键/外键。
如果要从1开始使用数组ID而不是
<?php
$arr = array("a","b","c");
array_unshift($arr,"");
unset($arr[0]);
print_r($arr);
答案 1 :(得分:1)
如果我说得对,你显然想要将两个完全不同的用途用于同一列:
虽然可能会这样做,但恕我直言,这令人困惑,难以维持。从设计的角度来看,最好只使用两列。它更干净,并且当您需要设置不同的订单时,它不会强制您更新所有链接表中的键。
关于AUTO_INCREMENT
功能,它是一种旨在生成唯一递增无意义数字的机制。它主要是为surrogate keys设计的,它不允许像重用值那样简单。
您的其他问题:
这是否正确使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));
}
// ...