Вопрос:
Мне нужно запустить этот запрос 100 раз для ввода данных в мою базу данных MySQL. ID автоматически увеличивается. Не беспокоит увеличение столбца Name. Просто нужно заполнить базу данных. Каков наилучший способ сделать это без необходимости копировать/вставлять 100 раз?
«INSERT INTO ‘tables'(id, name, assigned_seating, open_seating, position) VALUES (», ‘Table 1’, 0, 1, »)»; Лучший ответ:
Если кто-то увидит это в будущем, это лучший ответ
public function addbatch() { for ($i = 1; $i <= 100; $i++) { $tableName = «Table » . $i; $q = «INSERT INTO ‘tables'(id, name, cap, assigned_seating, open_seating, position) VALUES (», ‘».$tableName.»‘, 10, 0, 1, »)»; $this->db->query($q); } }
вызов функции один раз. Обязательно удаляйте, когда это сделано!
Ответ №1
Вы можете сделать пакетную вставку:
insert into Table (column1, column2) VALUES (‘value 1’, ‘value2’) , (‘value3’, ‘value4’)
Вы можете делать столько строк, сколько хотите, пока вы их разделяете на comas.
Ответ №2 $vals=»; for ($i = 0; $i < 100; $i++) { $vals.=»(‘Table 1′, 0, 1, »),»; } $vals=rtrim($vals,’,’); mysqli_query($dbh, ‘INSERT INTO ‘tables'(name, assigned_seating, open_seating, position) VALUES ‘ . $vals);
предполагаемый идентификатор был автоматически увеличен, поэтому просто оставьте его вне запроса
Ответ №3
попробуй это:
DELIMITER $$ DROP PROCEDURE IF EXISTS ‘multipleInsert’ $$ CREATE PROCEDURE ‘multipleInsert'(in n int) BEGIN DECLARE cont int default 0; WHILE cont < n DO INSERT INTO ‘tables'(id, name, assigned_seating, open_seating, position) VALUES (», ‘Table 1’, 0, 1, »); set cont = cont + 1; end while; END $$ DELIMITER ;
Процедура вызова:
call multipleInsert(100); Ответ №4
Все, что вам нужно, это существующая таблица с не менее чем 100 строками. В качестве примера я буду использовать information_schema.columns:
INSERT INTO ‘tables'(id, name, assigned_seating, open_seating, position) SELECT null, ‘Table 1’, 0, 1, » FROM information_schema.columns LIMIT 100;