2017-02-07 4 views
0

Мне нужно запустить этот запрос 100 раз для ввода данных в мою базу данных MySQL. ID автоматически увеличивается. Не беспокоит увеличение столбца Name. Просто нужно заполнить базу данных. Каков наилучший способ сделать это без необходимости копировать/вставлять 100 раз?Выполнение SQL-запроса несколько раз

"INSERT INTO `tables`(id, name, assigned_seating, open_seating, position) VALUES ('', 'Table 1', 0, 1, '')"; 
+0

использовать для петли? – pocketg99

+0

можно сделать в одном запросе, не нужно 100, дайте мне написать, чтобы написать – nogad

+1

. Вы можете сделать это в восьми запросах, если вы выполните это с помощью 7 'INSERT .... SELECT' ... хотя технически вы закончите с 128 строками. – Uueerdo

ответ

0

Если кто-то считает, что это в будущем, это самый лучший ответ

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); 
    } 
} 

функцию вызова один раз. Обязательно удаляйте, когда это сделано!

0

Вы можете сделать Пакетная вставки:

insert into Table 
(column1, column2) 
    VALUES 
     ('value 1', 'value2') , 
     ('value3', 'value4') 

Вы можете сделать столько строк, сколько вы хотите, пока вы разделите их запятыми.

0
$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); 

предполагается идентификатор был автоматически увеличен так просто оставить его из запроса

0

попробовать это:

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 ; 

Procedure Call:

call multipleInsert(100); 
0

Все, что вам нужно, это существующий стол с не менее чем 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; 

Демо: http://rextester.com/DMSC23853

Смежные вопросы