Как найти отсутствующие данные в массиве или в таблице MySQL? - PullRequest
0 голосов
/ 13 декабря 2008

У меня есть массив, заполненный значениями (идентификаторы твиттера), и я хотел бы найти недостающие данные между самым низким идентификатором и самым высоким идентификатором? Хотите поделиться простой функцией или идеей, как это сделать?

Кроме того, мне было интересно, могу ли я сделать то же самое с mySQL? У меня есть индексированный ключ. В данный момент таблица содержит 250 тыс. Строк, поэтому временная таблица, а затем объединение не будут очень быстрыми и эффективными. Я мог бы сделать цикл PHP для циклического прохождения данных, но это также заняло бы много времени и много памяти. Могу ли я выполнить конкретный запрос mysql? или я могу как-то использовать функцию сверху с этим?

Спасибо, Джеймс Хартиг http://twittertrend.net

Ответы [ 3 ]

1 голос
/ 13 декабря 2008

Ваш диапазон () дал мне хорошую идею, ваш код не работал как уникальный, сохраняет уникальные ключи, поэтому я просто остался с результатом функций диапазона.

Однако это сработало:

$diff = array_values(array_diff(range(min($array), max($array), 1), $array)); //returns array of incomplete values
1 голос
/ 23 февраля 2010

У меня было похожее требование и я написал функцию, которая возвращала бы список пропущенных идентификаторов.

---------------------------
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
1 голос
/ 13 декабря 2008

Вы имеете в виду последовательные идентификаторы?

В этом случае

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...