如何在数组或mySQL表中查找丢失的数据?

时间:2008-12-13 02:02:32

标签: php mysql

我有一个数组填充了值(twitter ids),我想找到最低ID和最高ID之间的缺失数据?如何分享关于如何做到这一点的简单功能或想法?

另外,我想知道我是否可以对mySQL做同样的事情?我有密钥索引。该表现在包含250k行,因此临时表和连接将不会非常快速或有效。我可以做一个PHP循环来循环数据,但这也需要很长时间,并且需要大量内存。我可以运行特定的mysql查询吗?或者我可以以某种方式使用上面的函数吗?

谢谢, 詹姆斯哈蒂格 http://twittertrend.net

3 个答案:

答案 0 :(得分:1)

您的意思是顺序ID吗?

在那种情况下

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

在SQL中(带占位符)

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

答案 1 :(得分:1)

你的范围()给了我一个好主意,你的代码不能作为唯一的保留唯一键,所以我只剩下范围函数结果。

然而,这有效:

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

答案 2 :(得分:1)

我有类似的要求,并编写了一个返回缺失ID列表的函数。

---------------------------
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