Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
 Аватар для lion-art
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 28

Ввод элементов массива в БД

21.08.2013, 19:05. Показов 8017. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго вечера коллеги =)
Ниже кусок кода которым я ввожу данные в Mysql таблицу. таблица состоит из 19 столбцов. Так как у меня каждый массив содержит по 19 элементов. Сколько будет массивов не известно. Подскажите как можно ввести в бд одним махом массив $file c [0] по [n]? Ничего похожего в обсуждениях не нашел.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        mysql_query 
        ("INSERT INTO games 
            (`".implode
                ("`, `",array_keys($file[0])
                )."`
            )
        VALUES 
            ('".implode
                ("','",array_values($file[0])
                )."'
            );"
        );
    mysql_query 
        ("INSERT INTO games 
            (`".implode
                ("`, `",array_keys($file[1])
                )."`
            )
        VALUES 
            ('".implode
                ("','",array_values($file[1])
                )."'
            );"
        );
Сам Массив выглядит примерно так...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [0] => Array
        (
            [0] => Телепузики  
 
            [1] => Аншлаг
 
            [2] => Х/М Буратино
            ....
            [19]=>Эротика
    
    [1] => Array
        (
            [0] => Телепузики  
 
            [1] => Очумелые ручки
 
            [2] => Х/М Винни-Пух
            ....
            [19]=>Эротика с Анфисой Чеховой
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.08.2013, 19:05
Ответы с готовыми решениями:

Помогите сделать ввод количества элементов массива и сами элементы массива
var a:array of integer; i:integer; BEGIN clrscr; randomize; writeln('Массив А:'); for i:=1 to 25 do begin ...

Организовать ввод-вывод массива, определить количество нулевых элементов массива
2. Составить программу, в которой организовать ввод-вывод одномерного массива, нахождения количества нулевых элементов массива

Ввод элементов массива, вывод и увеличение каждого элемента массива в 3 раза
Заданы два одномерных массива разного размера. Организовать три процедуры: ввод элементов массива, вывод элементов массива и процедуру...

29
 Аватар для lion-art
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 28
25.08.2013, 18:28  [ТС]
Студворк — интернет-сервис помощи студентам
Ну как всегда в php без гемороя никуда... Я вообще изначально задумывался над конструкцией цикла такого типа:
Считаем количество массивов а следующий цикл вводит данные в БД пока не достигнет конечного числа массивов... Но судя по обсуждениям все придется делать через... Короче тернистым путем придется идти...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.08.2013, 18:36
Цитата Сообщение от lion-art Посмотреть сообщение
Ну как всегда в php без гемороя никуда
Я, конечно, не спорю, что пых - костыль на костыле. Но в чем здесь костыль-то?
Цитата Сообщение от lion-art Посмотреть сообщение
Но судя по обсуждениям все придется делать через... Короче тернистым путем придется идти...
ой, слушайте вы это больше. Ага, еще сделайте
Цитата Сообщение от sqlnub Посмотреть сообщение
ТС, в общем пишите в файл, оттуда по строкам читайте и все будет так же.
Вот уж действительно, нелепый костыль через одно место
0
Заблокирован
26.08.2013, 09:30
KOPOJI,

Обилие цитат говорит о том, что по существу сказать нечего.

ТС, вполне понятно что можно сделать массив где в первой строчке будут заголовки, а все остальное - данные.

PHP
1
2
3
4
5
$arr = array(
  [0] => array('field0', 'field2', 'field3'),
  [1] => array(1, 'test', 'еуые'),
  [2] => array(2, 'check', 'срусл')
);
Тогда мы просто должны знать что 0 это array_valaues($arr[0]) - даст нам имена полей,
а все остальное в цикле - значения.

Это все хорошо пока кроме названий полей ничего не надо. Если вдруг занадобились типы, то придется добавить еще строку и начинать качать данные не с 1, а с 2, или в строку 0 впихивать эти d, s, s значениями, типа 'field0'=>'d'

Но как бы там ни было, это все сгодится только для вставки и только для разовой вставки данных. Удалить, обновить и вставить связанное - не получится.

Добавлено через 15 минут
Потому что таблица это двумерный массив. Попытки превратить его в набор одномерных сугубо ограничивают возможности, или к тому же пожирают ресурсы.
0
 Аватар для lion-art
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 28
27.08.2013, 08:17  [ТС]
Не считаю себя конкретным нубом в php но обсуждение меня поставило в тупик. Самый простой способ при том что значения и количество массивов постоянно меняются это выходит способ описанный ниже?
Цитата Сообщение от sqlnub Посмотреть сообщение
примерно так:

Array [file] (
...
Array [values] = Array([0].., [1]...);
)

PHP
1
2
3
4
5
6
7
8
9
            var res = [];
            
            // колонки в строки
            for(var i = 0; i < file.length; i++) {
                for(var j in file[i].value) {
                    if( !res[j] ) res[j] = [];                  
                    res[j].push(file[i].value[j]);
                }
            }
На пхп эту строку "if( !res[j] ) res[j] = [];" можно выкинуть, потому что там не такие массивы как на яве.

Если что, вот с пхп

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        case 'INSERT':
            $sets = Array();
            $names = Array();
            
// fields это массив объектов, field - следовательно - объект
 
            foreach($fields as $field) {
                $names[] = $field->name; // попутно собираем имена
                foreach($field->value as $index => $value) {
                    $sets[$index][] = checkField($link, $field->flags, $field->type, $value); // это свое
                }           
            }
// в финале плющим массив в строки через запятую чтобы затем еще раз расплющить с разделителем ),( и окружить (), - что и дает искомое
 
            $vals = Array();
            foreach($sets as $values) {
                $vals[] =  implode(', ', $values);
            }
Добавлено через 8 минут
Общий принцип поворота такой. На входе

arr[ i ][ j ]

на выходе

arr[ j ][ i ]

ЗЫ Отсутствие этой строчки if( !res[j] ) res[j] = []; убивало меня целый час. Я-то думал что ЯС сображает не хуже php. Оказалось хуже
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.08.2013, 09:31
ну если вам нравится писать костыль на 20 строк с тремя медленными циклами, да еще и вложенными, вместо 10 строк с одним циклом, то да
0
 Аватар для lion-art
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 28
27.08.2013, 10:09  [ТС]
Но по вашей схеме получается надо знать конечное количество массивов как я понял. А мне необходимо автоматизировать систему ввода массивов в БД вне зависимости от их количества. Единственная известная переменная это количество элементов массивов - 19. Значение неизменно. Но перечислять все массивы это не логично по будням их не больше 10 (куда бы то ни шло) а в субботу массивов 46 было... Я просто ищу вариант который не нужно будет постоянно подправлять...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.08.2013, 11:08
Цитата Сообщение от lion-art Посмотреть сообщение
Но по вашей схеме получается надо знать конечное количество массивов как я понял
с чего вы это поняли?

Добавлено через 1 минуту
Единственное, что влияет - это
Цитата Сообщение от NEbO Посмотреть сообщение
ограничении длины запроса, и при очень длинных вставках, помимо разбития на вариант без лишних INSERT INTO, также желательно учесть ограничение по длине и разбить на подзапросы
0
 Аватар для lion-art
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 28
27.08.2013, 13:33  [ТС]
По всей видимости я не правильно понимаю вот эту часть?
Цитата Сообщение от KOPOJI Посмотреть сообщение
Повторюсь. Если поля не меняются - то практически тоже самое.
[PHP]$values = array(
array('field1'=>'value1_1', 'field2'=>'value2_1', 'field3'=>'value3_1'),
array('field1'=>'value1_2', 'field2'=>'value2_2', 'field3'=>'value3_2'),
array('field1'=>'value1_3', 'field2'=>'value2_3', 'field3'=>'value3_3'),
);
[/SQL]
0
Заблокирован
27.08.2013, 14:09
Цитата Сообщение от lion-art Посмотреть сообщение
Самый простой способ при том что значения и количество массивов постоянно меняются это выходит способ описанный ниже?
Количество строк тут значения не имеет, хоть стопицот. Количество полей полей тоже. Значение имеют возможности. Чтобы достать из строчного массива данные колонок для условия WHERE - для удаления или обновления пачкой, вам все равно придется корячиться.

Если вы считаете что никогда в жизни вам такое не придется делать - как обычно все кто ищет короткие пути считают - то сделайте массив где строка 0 - названия полей, а все остальное - данные. Как это делается в обычной хтмл таблице где rows[0] - заголовок, а rows[>0] - данные.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.08.2013, 15:36
Цитата Сообщение от lion-art Посмотреть сообщение
По всей видимости я не правильно понимаю вот эту часть?
Неправильно. Это был просто массив для примера, его длина высчитывается в начале последующего цикла. Значение имеет только возможная длина самого текста запроса к БД
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2013, 15:36

Ввод элементов массива с клавиатуры и среднее арифметическое этих элементов
как сделать так, чтобы человек сам вводил данные для массива, после нажатия на кнопку. А дальше прога сама считывала введенные числа и...

Определение и вывод номеров минимальных элементов двумерного массива и ввод массива меньшей размерности
Доброго времени суток. Пожалуйста, помогите с решением задания. Заранее спасибо. Исходная задача: В действительном массиве...

Разработайте программу, в которой организован ввод элементов одномерного массива и вывод данных элементов
Разработайте программу, в которой организован ввод элементов одномерного массива и вывод данных элементов, как показано на рисунке...

Описать функцию, вычисляющую произведение чисел целочисленного массива A(N) . Ввод элементов массива оформить в виде процедуры
Описать функцию, вычисляющую произведение чисел целочисленного массива A(N) . Ввод элементов массива оформить в виде процедуры. Пожалуйста...

Ввод размерности массива и элементов массива с клавиатуры
Организовать ввод размерности массива и элементов массива с клавиатуры и вывод полученных результатов на экран.Найти сумму максимального и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru