我不知道是否可以使用sql查询完成它还是需要php代码 当cid 缺失
时存在许多我无法手动处理的缺失值
例如,我没有cid=1
和cid=6
。
我想插入一行:
cid=1 tcp_sport='undefined' tcp_dport='undefined'
和
cid=6 tcp_sport='undefined' tcp_dport='undefined'
在我看来,我应该创建一个过程并在行之间插入
我认为另一个解决方案是,我将使用相应的顺序创建一个带有cid和未定义值的表,然后将其加入到该表中,此连接应具有例如ifnull(tcp_sport,'')
你能帮我吗?
答案 0 :(得分:4)
首先,使用MAX获取最大的ID。
SELECT MAX(cid) as max FROM table
然后,创建一个for循环以检查各个ID是否存在:
for ($i = 0; $i < $max; $i++) {
// $query = ... SELECT 1 FROM table WHERE cid = $i ...
// check if the number of rows for $query is greater than 0
// if not, INSERT INTO table VALUES ($i, DEFAULT, DEFAULT)
}
答案 1 :(得分:3)
自动增量ID的整个想法是拥有一个只引用一件事的值。通过“插入线条之间”,您可能会遇到许多无法预料的问题。图像您有另一个表,其中包含一些链接到此表的CID的值。如果该表已有CID = 1的条目,当您插入CID = 1的新项时,它将加入该支持记录。因此,真正属于CID = 1的原始项目的数据将显示可能与之无关的新项目。
您不会耗尽ID值(如果您接近整数限制,请将其切换为bigInt),如果可以避免,请不要重复使用ID。
答案 2 :(得分:2)
您需要使用PHP来自动执行此操作。
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);
while($i < max_value_cid)//replace max_value_cid by the numeric maximum value of cid (SELECT MAX(cid) as max FROM table)
{
$result = mysql_query("SELECT * FROM `table` WHERE cid=".$i, $link);
if(mysql_num_rows($result) == 0)
mysql_query("INSERT INTO `table` VALUES ($i, NULL, NULL);", $link);
$i++;
}
?>
在执行之前测试样本集上的查询,并记住备份整个表,只是在案例中。