删除某些值时,我需要选择哪些设置来维护有序队列。我创建了带有自动增量和主键的 id 的表。当我第一次插入值时,没问题。就像 1,2,3,4,5...
当删除某些值时,顺序会发生变化,例如 1,5,3...
。而且脚本不能很好地工作。
一些代码:
if(isset($submit)){
if($pav2 == ""){
header('Location: index.php');
}
khác {
$select = mysql_query("SELECT new_id from naujiena ORDER by new_id");
$zym = mysql_num_rows($select);
if($zym == 0) {
$query = mysql_query("INSERT INTO naujiena (new_id,new_pav) VALUES ('1','$pav2')");
header('Location: index.php');
}
khác {
$select2 = mysql_query("SELECT new_id from naujiena ORDER BY new_id DESC LIMIT 1");
$max_public_id = mysql_fetch_row($select2);
$query2 = mysql_query("INSERT INTO naujiena (new_id,new_pav) VALUES ('$max_public_id[0]'+1,'$pav2')");
header('Location: index.php');
}
}
}
当new_pav和new_id刚刚添加时:示例:
new_id new_pav
5 some_value
4 some_value
3 some_value
2 some_value
1 some_value
当我删除某些内容时,它会变成:例如:
new_id new_pav
4 some_value
2 some_value
3 some_value
1 some_value
您在这里关心的是关于数据库中的表是什么的常见误解。
当您从空白表开始并添加几行时,主键将为您提供一系列升序的唯一值。执行一个简单的 SELECT * FROM MyTable
将为您提供:
MyTable
ID other columns
1 row1
2 row2
3 row3
4 row4
5 row5
又漂亮又漂亮,是吧?现在,当您从该表中删除行时,例如第 2 行和第 4 行,您期望相同的选择会为您提供:
MyTable
ID other columns
1 row1
3 row3
5 row5
不幸的是,这KHÔNG它的工作原理,您可能会得到这样的结果:
MyTable
ID other columns
1 row1
5 row5
3 row3
不太漂亮。原因很简单:当您运行 SELECT * FROM MyTable 查询时,查询返回的行的顺序是未定义的。数据库可以按照它想要的任何顺序给出 tham,除非您指定特定顺序。
如果您确实希望行按某种一致的顺序排列,则需要这么说。
SELECT * FROM MyTable ORDER BY id
将为您提供您要查找的内容。
现在为什么它会起作用?为什么在删除内容之前行的顺序是完美的?这恰好是数据库从新表中检索数据的最有效顺序 - 仅此而已。如果数据库有任何更有效的方法来做到这一点,它就会首先以不同的顺序开始。
biên tập:自从您进行编辑以来,您的问题与我最初的想法不同。您似乎担心当您删除具有最高 id 的行时,新行将获得相同的 id。那是因为你让整个事情变得比它需要的更加复杂。
第 1 步:更改数据库
将您的 new_id
列设置为 INT AUTO_INCRMENT PRIMARY KEY
,如本 Câu đố SQL 所示
第 2 步:将代码更改为(还修复了原始代码的 SQL 注入(inject)问题)
if(isset($submit)){
if($pav2 == ""){
header('Location: index.php');
}
khác {
$query2 = mysql_query("INSERT INTO naujiena (new_id,new_pav) VALUES (0,'". mysql_real_escape_string($pav2)."')");
header('Location: index.php');
}
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!