gpt4 book ai didi

php - 有效地查找表中不存在的第一个数字?

转载 作者:行者123 更新时间:2023-12-03 18:47:19 26 4
gpt4 key购买 nike

我有一个约528829行的表,它看起来像

CREATE TABLE `ips` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`ip` INTEGER NOT NULL DEFAULT NULL,
`scantime` INTEGER NULL DEFAULT NULL,
`pingable` INTEGER NULL DEFAULT NULL
);


现在,我需要找到 ip中不存在的第一个数字,从0开始到4294967295(aka 0xFFFFFFFF),

目前我只是用

function isScanned($ip){
static $isScannedStm=false;
static $boundip=0;
if($isScannedStm===false){
global $db;
$isScannedStm=$db->prepare('SELECT 1 FROM `ips` WHERE `ip` = :ip LIMIT 1');
$isScannedStm->bindParam(':ip',$boundip,PDO::PARAM_INT);
return isScanned($ip);
}
$boundip=$ip;
$isScannedStm->execute();
//var_dump($isScannedStm->fetch(PDO::FETCH_NUM));
return !!($isScannedStm->fetch(PDO::FETCH_NUM));
}
//~~~
while(isScanned($i)){
++$i;
}


..它可以工作,但是有528829行,在我的Intel Atom C2750 @ 2.4GHz上需要1小时30分钟。.我如何更快地找到该值?最好快得多?

最佳答案

我只在MySQL中测试过,希望它也适用于SQLite

SELECT ips.ip+1 AS Missing 
FROM ips
LEFT JOIN ips AS next ON ips.ip+1 = next.ip
WHERE next.ip IS NULL
ORDER BY ips.ip LIMIT 1;


Caspar和splattru的解决方案: https://stackoverflow.com/a/6464763/1078488

关于php - 有效地查找表中不存在的第一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com