2011-09-13 2 views
2

Вместо того, чтобы создать строку после строки тест одного данных в то время, есть запрос я мог бы работать в MySQL, чтобы сделать следующее:Вставка дублированных данных теста MySQL - простой способ?

имя таблицы: my_table Строки состоят из: ID (автоинкрементный), имя_файла, LNAME, электронная почта, телефон

данные испытаний должны быть продублированы в 100 строк, в котором данные будут:

1 John Doe [email protected] 0000000 
2 John Doe [email protected] 0000000 
... 
100 John Doe [email protected] 0000000 

Спасибо!

+0

Вы можете написать цикл, чтобы сделать это на языках сервера, например php, или написать функцию mysql/prucedure с помощью цикла, например: http://www.java2s.com/Tutorial/MySQL/0201__Procedure-Function/Insertdatainawhileloop.htm –

+0

@Haim : Для такой простой вставки нет петли. И если он хочет добавить миллион строк, цикл будет медленным. –

+0

10x я узнаю из ответов –

ответ

1

Этого SQL должен делать трюк - просто изменить ВСТАВКУ

DELIMITER // 


CREATE PROCEDURE addItems(number INT) 
BEGIN 
    label1: LOOP 
    SET number = number - 1; 
    INSERT .... 
    IF number <> 0 THEN ITERATE label1; END IF; 
    LEAVE label1; 
    END LOOP label1; 
END;// 

DELIMITER ; 
CALL addItems(100); 
+0

Спасибо! Что бы я изменил INSERT?? – Gazzzzza

+0

Все хорошо! Работал как шарм. Спасибо Ed! – Gazzzzza

5

Один из способов сделать это - использовать существующую таблицу с таким количеством строк, которое вы хотите вставить в новую таблицу. предположим, что существующая таблица old_table и имеет 100 (или более) строк каких-либо данных, вот что вы должны сделать следующее:

insert into my_table (fname,lname,email,phone) 
    select 'John', 'Doe', '[email protected]', '0000000' 
    from old_table 
    limit 100 

Если первичный ключ в my_table является автоматическое приращение, то это должно работать

+2

Добавьте 'LIMIT 100' в свой выбор, поэтому он будет работать и с любой более крупной« старой_таблицей »:) –

+0

Только проблема в том, что у меня нет уже существующей таблицы :) Просто хотел проще всего через SQL-запрос. – Gazzzzza

4

Вы можете создать неназванный блок и использовать цикл внутри для выполнения запроса 100 раз.

BEGIN 
    DECLARE v1 INT DEFAULT 0; 

    WHILE v1 < 100 DO 
    INSERT INTO my_table (ID, fname, lname, email, phone) VALUES (DEFAULT, 'John', 'Doe', '[email protected]', '000000'); 
    SET v1 = v1 + 1; 
    END WHILE; 
END 
+1

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «DECLARE v1 INT DEFAULT 0» по строке 2 – Gazzzzza

0

Я думаю, вам нужно написать простой фрагмент кода, который сделает это за вас. Так как ваш идентификатор автоматической инкрементный, это будет что-то вроде:

<?php 
$sql = "INSERT INTO table1 (fname, lname, email, phone) VALUES "; 

for($i=0;$<=100;$i++) 
    $sql .= "('John', 'Doe', '[email protected]', '0000000'),"; 

mysql_query(substr($sql, 0, -1)); 
?> 
+0

Спасибо! Пробовал, но он не вставлял? :( – Gazzzzza

+0

я предполагаю, что вы сделали mysql_connect и mysql_select_db первым –

+0

Йуп \t $ соединения = mysql_connect ("локальный", "пользователь", "передача");?! \t mysql_select_db ("имя_бд"); – Gazzzzza

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