1. PHP / Говнокод #2570

    +158.2

    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
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    if(!$result = MYSQL_QUERY("SELECT gmr_id, gam_chip, gam_price, gam_status FROM ".PREFIX."_games;")) { die(mysql_error()); exit; }
        if(MYSQL_NUMROWS($result))
        {
            while($rows = mysql_fetch_row($result))
            {
                if(isset($gmr_chip[$rows[0]])) $gmr_chip[$rows[0]] += $rows[1];
                else $gmr_chip[$rows[0]]  = $rows[1];
                if(isset($gmr_price[$rows[0]])) $gmr_price[$rows[0]] += $rows[2];
                else $gmr_price[$rows[0]]  = $rows[2];
            }
        }
    
    
        if(!$result = MYSQL_QUERY("SELECT gmr_id, gmr_regdate, gmr_login, gmr_mail, gmr_credits, gmr_money, gmr_status, gmr_birthday, adv_id FROM ".PREFIX."_gamers WHERE gmr_birthday != '';")) { die(mysql_error()); exit; }
        if(MYSQL_NUMROWS($result))
        {
            while($rows = mysql_fetch_row($result))
            {
                $gmr_id[$rows[0]]       = $rows[0];
                $gmr_regdate[$rows[0]]  = $rows[1];
                $gmr_login[$rows[0]]    = $rows[2];
                $gmr_mail[$rows[0]]     = $rows[3];
                $gmr_credits[$rows[0]]  = $rows[4];
                $gmr_money[$rows[0]]    = $rows[5];
                $gmr_status[$rows[0]]   = $rows[6];
                $gmr_birthday[$rows[0]]     = $rows[7];
                if(!isset($gmr_quations[$rows[0]])) $gmr_quations[$rows[0]] = 0;
                if(!isset($gmr_chip[$rows[0]]))     $gmr_chip[$rows[0]]     = 0;
                if(!isset($gmr_price[$rows[0]]))    $gmr_price[$rows[0]]    = 0;
                if(isset($gmr_adverted[$rows[8]])) $gmr_adverted[$rows[8]]++;
                else $gmr_adverted[$rows[8]] = 1;
                $gadv_id[$rows[0]]       = $rows[8];
            }
        }
        MYSQL_QUERY("DROP TABLE ".PREFIX."_tmp_gamers;");
    
        if (!mysql_query ("CREATE TABLE ".PREFIX."_tmp_gamers (
             gmr_id              INT UNSIGNED NOT NULL AUTO_INCREMENT,
             gmr_regdate         DATE NOT NULL,
             gmr_login           CHAR(32) NOT NULL,
             gmr_mail            CHAR(32) NOT NULL,
             gmr_credits         INT UNSIGNED NOT NULL,
             gmr_money           DEC(10, 2) UNSIGNED NOT NULL,
             gmr_status          INT UNSIGNED NOT NULL,
             gmr_birthday            CHAR(12) NOT NULL,
             gmr_quations        INT UNSIGNED NOT NULL,
             gmr_chip            DEC(10, 2) UNSIGNED NOT NULL,
             gmr_price           DEC(10, 2) UNSIGNED NOT NULL,
             gmr_adverted        INT UNSIGNED NOT NULL,
             adv_id              INT UNSIGNED NOT NULL,
                UNIQUE KEY (gmr_id));")) { die(mysql_error()); exit; }
    
    
        $first = true;
        $query = "INSERT INTO ".PREFIX."_tmp_gamers VALUES ";
        if(isset($gmr_id))
        {
            foreach($gmr_id as $key)
            {
                if(!$first) $query .= ', ';
                else $first = false;
                if(!isset($gmr_adverted[$key])) $gmr_adverted[$key] = 0;
                $query .= "($gmr_id[$key], '$gmr_regdate[$key]', '$gmr_login[$key]', '$gmr_mail[$key]', $gmr_credits[$key], $gmr_money[$key], $gmr_status[$key], '$gmr_birthday[$key]', $gmr_quations[$key], $gmr_chip[$key], $gmr_price[$key], $gmr_adverted[$key], $gadv_id[$key])";
            }
            $query .= ";";
            if(!MYSQL_QUERY($query)) { die(mysql_error()); exit; }
        }
    
        unset($gmr_id);
        unset($gmr_regdate);
        unset($gmr_login);
        unset($gmr_mail);
        unset($gmr_credits);
        unset($gmr_money);
        unset($gmr_status);
        unset($gmr_birthday);
        unset($gmr_quations);
        unset($gmr_chip);
        unset($gmr_price);
        unset($gmr_adverted);
        unset($gadv_id);
    
        $type = 'norm';

    И кучка unset-ов! Ты гляди - он еще и память экономит!
    В таблице _gamers over 5k записей. Не трудно догадаться, каких размеров получается строка $query? И главный вопрос: нахрена временная таблица?

    Запостил: azzz, 08 Февраля 2010

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

    • Ну по поводу Unset я согласен, только я делаю это с переменной в сессии, если знаю что с ней работать больше не буду.
      А по поводу таблицы, надо у автора уже спрашивать.
      Ответить
    • А зачем пересоздавать таблицу?
      Есть же TRUNCATE TABLE
      Ответить
      • Вопрос не по адресу:) Сам хочу знать.
        Ответить
    • Интересно, никогда не пробовал, а у мускула есть лимит на длину запроса? Например в командной строке винды он есть, нашел как-то :)
      Ответить
      • А там определяется установленной переменной max_allowed_packet.
        Максимум, который можно установить — 1 ГБ.

        http://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html
        Ответить
    • без контекста назначение временной таблицы не догадаешься. кому то нравится join'ы в PHP ручками делать...

      больше похоже на скрипт для миграции данных.
      Ответить
      • Нет. Всего-то вывод списка зарегистрированных юзеров в админке
        Ответить

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