我有一个数组填充了值(twitter ids),我想找到最低ID和最高ID之间的缺失数据?如何分享关于如何做到这一点的简单功能或想法?
另外,我想知道我是否可以对mySQL做同样的事情?我有密钥索引。该表现在包含250k行,因此临时表和连接将不会非常快速或有效。我可以做一个PHP循环来循环数据,但这也需要很长时间,并且需要大量内存。我可以运行特定的mysql查询吗?或者我可以以某种方式使用上面的函数吗?
谢谢, 詹姆斯哈蒂格 http://twittertrend.net
答案 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