За последние 24 часа нас посетили 22334 программиста и 1025 роботов. Сейчас ищут 689 программистов ...

Добавление массива в бд MySQL

Тема в разделе "PHP для профи", создана пользователем New_neo, 24 окт 2017.

  1. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Доброго времени суток всем! Есть задача: массив записать в бд. Как это реализовать не могу придумать. У кого какие идеи. Спасибо. Как вариант
    Код (Text):
    1. foreach($arr as $item){
    2. INSERT INTO dbo.T1 (1,2,3,4,5,6,7)
    3.     VALUES ('"$item"');
    4. }
    Но наверное не вариант!
     
    #1 New_neo, 24 окт 2017
    Последнее редактирование: 24 окт 2017
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    массив чего, в какую базу - какая структура?
     
  3. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Код (Text):
    1. {
    2.   "List": [
    3.     {
    4.       "OriginalName": "string",
    5.       "Genre": "string",
    6.       "Country": "string",
    7.       "ViewCountDaily": 0,
    8.       "AgeRestriction": "string",
    9.       "Thumbnail": "string",
    10.       "Cast": "string",
    11.       "Description": "string",
    12.       "Director": "string",
    13.       "CreatorName": "string",
    14.       "CreatorObjectID": "string",
    15.       "Year": "string",
    16.       "Duration": "string",
    17.       "HorizonalThumbnail": "string",
    18.       "IsNonStop": true,
    19.       "SubCreationIDs": [
    20.         0
    21.       ],
    22.       "Rating": "string",
    23.       "Trailers": [
    24.         "string"
    25.       ],
    26.       "Frames": [
    27.         "string"
    28.       ],
    29.       "ReleaseDate": "string",
    30.       "ObjectID": 0,
    31.       "ClassType": "string",
    32.       "Name": "string"
    33.     }
    34.   ]
    35. }
    Массив объектов с данными
     
  4. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    сериализовать массив (serialize) свой и записать в таблицу как текст в столбец типа text
     
  5. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    А пример можно ?
     
  6. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Вы предыдущее сообщение успели удалить)) а я успел прочитать))
    у Вас какая структура таблицы? Вам надо записать значения массива в столбцы таблицы имена которых совпадают с ключами массива?
    Или у Вас есть просто массив и вы хотите его целиком запихнуть в одно поле таблицы что бы потом можно было этот массив просто достать и что то с ним сделать? т.е. поиск по данным этого массива не предусматривается используя средства mysql)
     
  7. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Ключи совпадают
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    структуру таблицы покажи, а не примеры которые смысловой нагрузки не несут
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    https://dev.mysql.com/doc/refman/5.7/en/json.html как нынче там с поиском - я хз, в postgres с индексами вполне приемлемо, если это конечно не частые запросы, а с mysql я давно слез.
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    romach нравится это.
  11. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Всем спасибо! Решил проблему вот так:
    Код (Text):
    1. INSERT INTO `bd` (1,2,3) VALUES " . implode( ',',$values );
    Где $values - это массив
     
    Walk и denis01 нравится это.
  12. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    а вот хостинги не слезли...
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Есть же digitalocean )
     
  14. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Не стал создавать новую тему, т.к. суть вопроса та же, все думаю как массив в таблицу запнуть ::
    есть некая выгрузка из х..р пойми откуда со списком товаров, тут посидел поюзал PHPExel, получилось весь этот файл прочитать и вывести в виде таблицы, нашел решение на хабре, собственно
    PHP:
    1. require_once($_SERVER['DOCUMENT_ROOT'].'/phpExel/Classes/PHPExcel/IOFactory.php');
    2.         $file = $_SERVER['DOCUMENT_ROOT'].'/exel/qwe1.xlsx';
    3.         // Открываем файл
    4.         $xls = PHPExcel_IOFactory::load($file);
    5.         // Устанавливаем индекс активного листа
    6.         $xls->setActiveSheetIndex(0);
    7.         // Получаем активный лист
    8.         $sheet = $xls->getActiveSheet();
    9.         // Получили строки и обойдем их в цикле
    10.         $rowIterator = $sheet->getRowIterator();
    11.  
    12.         echo "<table>";
    13.         foreach ($rowIterator as $row) {
    14.             // Получили ячейки текущей строки и обойдем их в цикле
    15.             $cellIterator = $row->getCellIterator();
    16.             echo "<tr>";            
    17.             foreach ($cellIterator as $cell) {
    18.                 echo "<td>" . $cell->getCalculatedValue() . "</td>";
    19.                 $array[]=$cell->getCalculatedValue();
    20.             }        
    21.             echo "</tr>";
    22.         }
    23.         echo "</table>";
    24.         for($k=0; $k<=count($array); $k=$k+3){
    25.              единственное что сейчас идет в голову, это то, что я знаю, что у меня строка в 3
    26. ячейки, и я каждый элемент массива буду записывать в таблицу в цикле т.е.
    27. $sql = "INSERT INTO tovar (description, price, count)
    28. VALUES('$array[$k]', '$array[$k+1]', $array[$k+2])";
    29.         }
    30. Внимание вопрос:
    31. 1. почему-то подумал что если у меня товара будет 200 000 не гикнет ли БД от такого
    32. количества обращений.
    33. 2. вообще в правильном ли направлении я мыслю, или это делать лучше по другому?
    Сама таблица еще не создана, проект впереди, просто юзал PHPExel, чтобы понять как это работает, но логика будет такова, что exel файл через форму загрузки файлов из админки отправляем на сервер, он попадает в папку temp, данные переносятся в БД и файл удаляется.
     
    #14 karmay, 12 дек 2017
    Последнее редактирование: 12 дек 2017
  15. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    инсертить лучше сразу небольшими блоками, например по 100 записей за инсерт,
    БД не гикнет - гикнуть может скрипт импорта - если задано ограничение на время выполнения - потому его лучше увеличить или снять вообще
     
    karmay нравится это.
  16. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    И поиск по ним навернуть, да. А можно вообще всё в бд, в одну таблицу. Где вы этому научились ?

    @New_neo судя по вашему описанию приходящие данные статичны. Создайте таблицу с соответствующими полями и туда всё пихайте.

    Я надеюсь вы валидируете приходящие значения.
     
  17. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    все зависит от ситуации... я уже дважды сталкивался с ситуацией когда вариант хранения сериализованного массива был вполне достаточный..
     
  18. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    JSON
     
    Алекс8 нравится это.
  19. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а чем он в базе лучше чем сериализованный массив?
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    @Алекс8 например тем что он поддерживается многими япами, а пхп-сериализация - только в пхп. Да и в разных версиях может быть разной.
     
  21. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    я вроде помню что даже в с++ была сериализация)
     
  22. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Алекс8 нравится это.