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

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    $inst = $db->prepare("insert into year_$year (user_name,type_of_day,month_row,day_1,day_2,day_3,day_4,day_5,day_6,day_7,day_8,day_9,
    day_10,day_11,day_12,day_13,day_14,day_15,day_16,day_17,day_18,day_19,day_20,day_21,day_22,day_23,day_24,day_25,day_26,day_27,day_28,day_29,day_30,day_31)
    values
    (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
    
    $inst->execute($chunk_post[$init]);

    Оригинал тут http://hashcode.ru/questions/321962/php-mysql-%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0% B0-%D1%80%D0%B0%D0%B4%D0%BE%D0%BC%D0%BD%D0% BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1% 81%D1%82%D0%B2%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85

    Запостил: dimka3210, 22 Мая 2014

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

    • Этот хотя бы подготавливается.
      Ответить
    • Кстати, а как добавлять массив в бд?
      Ответить
      • 1) по строчке на элемент
        2) по колонке на элемент (как у ОП'а)
        3) в одно поле, например через json.dumps(array)

        Вроде ничего не забыл.
        Ответить
      • А какая БД?
        Если массив из битов, байтов, целых, то можно соответственно числом, блобом, если БД реляционная.
        Ответить
        • Массив из типов, которые есть в БД. Скажем, в sql.
          Ответить
          • Три способа я кидал выше.

            + некоторые базы умеют хранить массивы в полях:
            http://www.postgresql.org/docs/9.1/static/arrays.html
            Ответить
            • ага
              в Oracle можно в ячейку вообще вложенную таблицу засунуть - nested table
              + встроенный механизм работы с xml

              но как по мне - это не тот способ, чтобы расставить признаки для 31 дня месяца
              Ответить
              • > но как по мне - это не тот способ, чтобы расставить признаки для 31 дня месяца
                Ага, здесь лучше всего смотрится "1) по строчке на элемент". И структура простая, и юзать потом легко.
                Ответить
                • ну вот во мне почему то побеждает решение с varchar2(31), где кодировать включение/выключение дня как 0/1
                  выше локальность, меньше займет места, strpos substr и на стороне БД, и (тем более) на стороне приложения сделать несложно (если вдруг), нет геморроя со слежением за тем, что ты для одной родительской записи хранишь ровно одно 20е число (constraint-то в любом случае понадобится, а вот лочить перед апдейтом лучше 1 строчку, чем 30)

                  понятное дело, этот подход начинает ломаться, если нам надо вместо 0/1 для каждого дня хранить кучу доп. инфы
                  Ответить
    • ну давайте еще прямую трансляцию потока новых вопосов со stackoverflow организуем
      Ответить

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