ソートされたデータを持つ大きなMySQLテーブルがあります。私は出発点を見つける必要があるとき、私は下限のID(自動増分)を見つけるためにバイナリ検索を実行します。唯一の問題は、一部のデータが削除された後で、アルゴリズムによって与えられたIDが存在しない場合は、より低いIDを持つ最初の既存の行を調べる必要があることです。これを達成するためにこのコードをどのように変更する必要がありますか?削除された行を持つMySQLテーブルのバイナリ検索PHP
$l = 1;
$h = $max; //SELECT MAX(id)
while ($h - $l > 1){
$m = ($h + $l)/2;
$q = mysqli_query($db, "SELECT col FROM tab WHERE id=". floor($m));
$result = array();
while($result[] = mysqli_fetch_row($q)){;}
if ($result[0][0] < $val) $l = $m;
else $h = $m;
}
echo round($m);
は、例えば、私が12345を超えるCOLの値を持つ行を検索すると、テーブルは、私は、行5000を見て開始し、最大ID 10000を有する場合COL 7500次に= 9000、(COL = 13000)、6250が削除されているので、ID < 6250の第1の既存行を探し始め、6245にcol = 10500があることがわかりました。今度はID 6873と7500の間を探しています。
:あなたは、この(制限は、クエリリターンのみ1の結果を作るものです)か、ID 300より<で最初の行を取得したいのですがしかし、私はこれがそれを行う方法ではないと確信しています。 –