Dizideki veya MySQL tablo ya da eksik verileri bulmak nasıl?

3 Cevap php

Ben bir dizi değerleri (kimlikleri twitter) ile dolu ve ben düşük id ve yüksek id arasındaki eksik verileri bulmak istersiniz? Basit bir işlevi ya da bunu yapmak için nasıl fikir paylaşmak için herhangi bir bakım?

Ben mySQL ile aynı şeyi yapabilirsiniz, Ayrıca, ben merak ediyorum? Ben anahtar endeksli var. Tablo, şu anda 250k satır içeriyorsa, bu nedenle geçici bir tablo ve daha sonra çok hızlı ya da verimli olmaz katılın. Ben verileri döngü için bir PHP döngü yapabileceğini, ama bu da uzun bir zaman alabilir, ve bellek büyük bir olacaktır. Ben çalıştırabilirsiniz belirli bir mysql sorgu var mı? ya da ben bir şekilde bu ile yukarıdaki işlevini kullanabilirsiniz?

Thanks, James Hartig http://twittertrend.net

3 Cevap

Ben benzer bir gereklilik vardı ve eksik kimliklerinin bir listesini dönmek bir fonksiyon yazdım.

---------------------------
create function dbo.FreeIDs ()
---------------------------
returns @tbl table (FreeID int)

as
begin

    declare @Max int
    declare @i int

    select @Max = MAX(ID) from [TheTable]
    set @i = 0

    while @i < @Max begin
          set @i = @i + 1
          if not exists (select * from [TheTable] where ID = @i) 
             insert into @tbl select @i
    end

    return

end

Eğer sıralı kimlikleri demek?

O halde

$new_ids = range($lowid, $highid, 1);
$ids = array_merge($ids, $new_ids);
$ids = array_unique($ids);
sort($ids);

Ve SQL (tutucular ile)

SELECT key, other_data from `table` WHERE key > :low_id AND key < :high_id

Sizin aralığı () bana iyi bir fikir verdi, kod gibi eşsiz benzersiz anahtarları korur işe yaramadı, bu yüzden sadece aralığı fonksiyonları neden bırakıldı.

Ancak, bu çalıştı:

$diff = array_values(array_diff(range(min($array), max($array), 1), $array)); //returns array of incomplete values