4

我不知道是否可以仅使用 sql 查询来完成,或者在缺少cid 时需要 php 代码

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

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

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

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

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

我认为的另一种解决方案是,我将创建一个具有 cid 和 undifined 值以及相应顺序的表,然后将这个与那个连接起来,这个连接应该有例如 ifnull(tcp_sport,'')

你能帮帮我吗?

在此处输入图像描述

4

3 回答 3

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)
}
于 2012-07-19T16:26:04.397 回答
3

自动增量 ID 的整个想法是拥有一个只引用一件事的值。通过“插入字里行间”,您可能会面临许多无法预料的问题。图像您有另一个表,其中一些值链接到该表的 CID。如果该表已经有一个 CID=1 的条目,当您插入一个 CID=1 的新项目时,它将加入该支持记录。因此,真正属于 CID=1 的原始项目的数据将显示为可能与之无关的新项目。

您不会用完 ID 值(如果您接近整数的限制,请将其切换为 bigInt),如果可以避免,请不要重复使用 ID。

于 2012-07-19T16:31:40.253 回答
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++;
}
?>

在执行之前在样本集上测试查询,并记住备份整个表,以防万一。

于 2012-07-19T16:27:29.393 回答