1. Perl / Говнокод #4108

    −117

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    my $arr=[];
    my $res=$dbr->selectrow_arrayref("SELECT DISTINCT obj.value
    FROM obj
    INNER JOIN ...
    INNER JOIN ...
    INNER JOIN ...
    INNER JOIN ...
    INNER JOIN ...
    WHERE ..... 
    сложный, но не интересный SQL-запрос к наскольким таблицам под лям записей в каждом
    ...");
    arm_ls.lsid IN ($ls_str)
    
    foreach $row (@$res)
    {
    push(@$arr,$row->[0]) if (!grep(/^$row->[0]$/,@$arr));
    }
    my $sum=@$arr;
    return $sum;

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

    Запостил: Mihard, 26 Августа 2010

    Комментарии (5) RSS

    • хуйня какая-то, selectrow_arrayref - 1 строку возвращает, $row - будет скаляр.
      Ответить
    • Я чё-то не допонял..
      selectrow_arrayref - вернёт одну строку в виде ссылки на массив..
      foreach $row (@$res) - тогда тут $row будет каждой записью в этом массиве..
      Тогда $row->[0] должно вроде ж ексепшн выкинуть?
      arm_ls.lsid IN ($ls_str) - а это что такое вообще?
      Ответить
      • я думаю что постер слегка наговнил при копипасте.

        "arm_ls.lsid IN ($ls_str)" скорее всего часть сиквела.

        а selectrow_arrayref() должно быть по тексту selectall_arrayref().
        Ответить
    • да. это уже рефакторить начали, запрос с COUNT сделали, когда поделиться решил. Там естественно выбирался весь результат запроса.
      Вообщем выбираем все уникальные значения по запросу, дальше через foreach grep'ом еще раз проверяем уникальность и выводим количество "действительно уникальных" элементов.
      12я строка выпала из оригинального запроса, бывает.
      Ответить

    Добавить комментарий