在行之间插入值

时间:2012-07-19 16:24:05

标签: php mysql sql database insert

我不知道是否可以使用sql查询完成它还是需要php代码 当cid 缺失

存在许多我无法手动处理的缺失值

例如,我没有cid=1cid=6。 我想插入一行:

cid=1 tcp_sport='undefined' tcp_dport='undefined'

cid=6 tcp_sport='undefined' tcp_dport='undefined'

在我看来,我应该创建一个过程并在行之间插入

我认为另一个解决方案是,我将使用相应的顺序创建一个带有cid和未定义值的表,然后将其加入到该表中,此连接应具有例如ifnull(tcp_sport,'')

你能帮我吗?

enter image description here

3 个答案:

答案 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++;
}
?>

在执行之前测试样本集上的查询,并记住备份整个表,只是在案例中。