2012-07-19 77 views
4

我不知道这是否可以只用一个SQL查询来完成,或者它需要一个PHP代码 当CID是失踪插入值

存在很多缺失值,我可以” t手动处理

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

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

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

在我看来,我应该创建一个过程和线

之间插入

另一种解决方案,我thaught的是,我将创建一个带有cid和未定义值的表格,然后将其与这一个连接起来,例如ifnull(tcp_sport,'')

你能帮我吗?

enter image description here

+0

我不会将这些非信息添加到数据库中,而是在使用此表的代码中处理它。例如。加入时可以使用LEFT,RIGHT或OUTER连接来处理缺失的行。 – reinierpost 2012-07-19 17:01:14

回答

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

做测试在执行前设置的采样查询并记得备份整个表,刚刚在的情况下。

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) 
} 
+0

我没有1和6我有很多这样的行 – 2012-07-19 16:26:51

+0

回答更新,享受。 – 2012-07-19 16:29:46

3

自动增量ID的整个想法是有一个值只能指向一件事。通过“在两条线之间插入”你可能会让自己面临许多不可预见的问题。图像你有另一个表,有一些值链接到此表的CID。如果该表已经具有CID = 1的条目,那么当您插入CID = 1的新条目时,它将会加入到该支持记录中。因此,真正属于CID = 1的原始项目的数据将显示可能无关的新项目。

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

+0

我无法避免他们我有46922线,我创建了一个左连接,这是一个'创建视图警报为选择i​​.cid,i.ip_src,i.ip_dst,ifnull(t.tcp_sport,'') as tcp_sport,ifnull(t.tcp_dport,'')as tcp_dport from ipview i,tcpview t where i.cid = t.cid;'然后我有问题,因为php我的管理员会崩溃,所以我应该只做这个 – 2012-07-19 16:34:45

+0

那个例子isn不要左连接......并且不应该造成任何书面问题。phpMyAdmin是一个工具,如果它不起作用,请使用其他工具,不要因为工具错误而导致错误的数据库决策。 – invertedSpear 2012-07-19 16:38:36

+0

是的,我混在了我的意思是加入,但在此之前,我试着离开加入这也是我的问题,我没有得到正确的答案,但国家帮助我更多,所以我接受http://stackoverflow.com/questions/11560159/为什么创建视图从一个左加入视图不是很快 – 2012-07-19 16:49:56