PHP | MySQL Разобрать масив и сохранить в БД

82
20 апреля 2021, 00:10

Есть масив который хочу разобрать и записать в новую БД. Все что я пробовал не дало ожидаемого результата, а подозрение , что это намного проще чем я думаю, у меня есть.

 Array ( 
    [0] => ( 
    [ID] => 959
    [datakey] => 606
    [key] => keyname1
    [value] => valuename1
    [group] => tst
        )
    [1] => ( 
    [ID] => 960
    [datakey] => 606
    [key] => keyname2
    [value] => valuename2 
    [group] => tst
        )
    [2] => ( 
    [ID] => 961 
    [datakey] => 606
    [key] => keyname3
    [value] => valuename3
    [group] => tst2
        )
    [3] => ( 
    [ID] => 962 
    [datakey] => 607
    [key] => keyname1
    [value] => valuename1
    [group] => tst 
        )
    )

....

Нужно сохранить это в базу данных таким образом

id  |  datakey   |   tst (group)              | tst2  (group)          | ...
-----------------------------------------------------------------------------
    |  606       | keyname1 -> valuename1,      keyname3 -> valuename3 ...
                   keyname2 -> valuename2 ...
-----------------------------------------------------------------------------
    |  607       |  keyname1 -> valuename1,   |  ...
Answer 1

Сначала сформируем новый массив с данными:

$result = [];
foreach ($data as $array) {
    $content = $result[$array['datakey']][$array['group']];
    $value = implode(' ', [$array['key'], '->', $array['value']]);
    $result[$array['datakey']][$array['group']] = empty($content) ? $value : $content . ', ' . $value;
}

И после этого добавим новые строки в таблицу в БД:

foreach ($result as $key => $row) {
    $tstValue = $row['tst'] ?? '';
    $tst2Value = $row['tst2'] ?? '';
    // Формируем SQL-запрос на вставку данных
    $query = <<<SQL
INSERT INTO `table` SET `datakey` = $key, `tst` = '{$tstValue}', `tst2` = '{$tst2Value}';
SQL;
    // И здесь выполняем этот запрос
    mysqli_query($link, $query);
}

[!] Второй цикл представлен только в качестве примера, разумеется, вы должны по возможности добавлять данные одним запросом, а не в цикле, и проверять входящие значения, перед вставкой в БД.

Answer 2

Есть такая прекрасная библиотека для работы с MySQL: https://github.com/Vasiliy-Makogon/Database . Посмотрите документацию, может упростить решение вашей задачи.

READ ALSO
Не знаю как исправить ошибку: Exception in thread &ldquo;main&rdquo; java.util.InputMismatchException

Не знаю как исправить ошибку: Exception in thread “main” java.util.InputMismatchException

Недавно начал учить Java и постоянно сталкиваюсь с ошибками которых не могу исправить, поэтому прошу помощиВот код:

97
Метод get не передаёт значения переменной

Метод get не передаёт значения переменной

Есть два класса: Main и CyclesИз класса Cycles методом get() должно передаваться значение переменной SecSycles в класс Main в переменную MainCycle, но её значение...

93
Не работает удалённый сервис

Не работает удалённый сервис

В программе есть 1 интерфейс и 2 класса:

96
Удаление элементов из List&lt;Integer&gt; через Stream

Удаление элементов из List<Integer> через Stream

Дано - входящий List<Integer>По нему нужно пройтись через Stream, если сумма всех чисел чётная - удалить все чётные

91