10000000(8桁)から999999999(10桁)の範囲でMySQLからの数値があります。それは連続しているはずですが、欠けている数字があります。私はどの番号が欠落しているか知る必要があります。PHPのarray_diffより速い方法がありますか
範囲が巨大です。最初に私はこれを行うためにPHPを使用するつもりでした:
//MySqli Select Query
$results = $mysqli->query("SELECT `OCLC Number` FROM `MARC Records by Number`");
$n_array = array();
while($row = $results->fetch_assoc()) {
$n_array[] = $row["OCLC Number"];
}
d($n_array);
foreach($n_array as $k => $val) {
print $val . " ";
}
/* 8 digits */
$counter = 10000000;
$master_array = array();
/* 10 digits */
while ($counter <= 9999999999) {
$master_array[] = $counter;
$counter++;
d($master_array);
}
d($master_array);
$missing_numbers_ar = array_diff ($master_array, $n_array);
d($missing_numbers_ar);
d()は、var_dump()に似たカスタム関数です。
しかし、私はこれが完了するまでに何時間もかかることに気付きました。 15分の時点で、$ master_arrayには4000個の数字だけが入力されています。
これをより迅速に行うにはどうすればよいですか? MySQLのみまたはMySQLとPHPの両方のソリューションを歓迎します。最適な解決策が欠落している番号の数に依存する場合は、どうすればいいか教えてください。 Tq。
デュープ:http://stackoverflow.com/questions/4340793/how-to-find-gaps-in-sequential-numbering-in-mysql – nogad
あなたがあなたのテーブルに100億件のレコードを持っているとは考えにくいです。データベース内のすべてのIDをフラットファイルにダンプしてソートし、テキストファイルの行ごとに繰り返していくことでどのような違いがあるのかを確認するだけです。それは通常、本当に速く実行されます。 – tadman
[mysqlの連続番号付けの隙間を見つける方法?](http://stackoverflow.com/questions/4340793/how-to-find-gaps-in-sequential-numbering-in-mysql) – imel96