2015-09-02 4 views
3

Простой MySQL таблицы:Mysql же строка копирования та же таблица 120 раз

CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT , 
`name` TEXT NOT NULL , 
`surname` text NOT NULL , 
`city` text NOT NULL , 
PRIMARY KEY ( `id`) 
) ENGINE = MYISAM 

И вставлено как:

INSERT INTO `users` (`id`, `name`, `surname`, `city`) VALUES (1,`rock`,`fixed`,`london`); 

Как я ввести такую ​​же детализацию таблицу из одной строки 100 раз с разным первичным идентификатором ?

+0

Снимите 'id' колонки и соответствующее значение в вашем запросе вставки. 'INSERT INTO users (имя, фамилия, город) VALUES ('rock', 'fixed', 'london');' –

+0

Итак, теперь, как я могу копировать одну и ту же строку в 100 раз, мне нужно скопировать эти данные 100 раз ? или какой-то короткий трюк? –

+0

Loop it.'for ($ x = 0; $ x <100; $ x ++) {/ * INSERT QUERY * /}' –

ответ

3

с PHP вы можете сделать это следующим образом:

for($i=0; $i< 119; $i++) 
{ 
    //execute your query here, do not include your id column 
    INSERT INTO `users` (`name`, `surname`, `city`) 
    VALUES (`rock`,`fixed`,`london`); 
} 

ИЛИ
Вы также можете сделать это с MySQL Процедура магазин как:

//Loop stored procedure 

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test$$ 
CREATE PROCEDURE test() 
BEGIN 
DECLARE count INT DEFAULT 0; 
WHILE count < 119 DO 
     INSERT INTO `users` (`name`, `surname`, `city`) 
     VALUES (`rock`,`fixed`,`london`); 
    SET count = count + 1; 
END WHILE; 
END$$ 
DELIMITER ; 

execute the stored procedure

call test(); 

РЕДАКТИРОВАТЬ НА ОСНОВЕ КОММЕНТАРИЕВ:
Ваш код не работает, потому что вы выполняете запрос «снаружи» зацикливание, код должен выглядеть следующим образом:

<?php 

*/here mysql connection 
for($x=0; $x<100; $x++) 
{ 
    $sql =INSERT INTO users (name, surname, city) 
      VALUES (rock,fixed,london); 
    $status = $conn->query($sql); 
} 

if ($status) 
{ echo "New record created successfully"; } 
else { echo "Error: " . $sql . "<br>" . $conn->error; } 
$conn->close(); 
?> 
+0

В любом случае я использовал php-тип, но в mysql он говорит: # 1136 - Количество столбцов не соответствует количеству значений в строке 1 –

+0

В php, используя его, не входящее 100 раз или 120 раз, как мне нужно, просто введите 1 временная строка для каждого исполнения. Я использовал код: query ($ sql) === TRUE) {echo «Новая запись создана успешно»; } else {echo "Ошибка:". $ sql. "
". $ Conn-> ошибка; } $ conn-> close(); ?> - –

+0

@Purohit, потому что вы выполняете запрос за пределами цикла, перемещаете 'if statement' внутри цикла –

-1

Поскольку id имеет свойство AUTO_INCREMENT, это должно генерировать уникальный идентификатор каждый раз, когда вы вводите данные.

Так что ваша строка вставки может быть такой:

INSERT INTO `users` (`name`, `surname`, `city`) VALUES (`rock`, `fixed`, `london`); 

Поле id будет автоинкрементные каждый раз, что дает вам уникальные идентификаторы

+0

Хорошо, теперь, как я могу копировать одну и ту же строку в 100 раз, мне нужно скопировать эти данные 100 раз? какой-то короткий трюк? –

+0

@ Ответ LuthandoLoot показывает вам, как делать цикл 'for' в PHP, вставляя 100 строк – SeanS

+0

В php, используя его, не входящее 100 или 120 раз, как мне нужно, оно просто вводит 1 временную строку для каждого исполнения. Я использовал код: query ($ sql) === TRUE) {echo «Новая запись создана успешно»; } else {echo "Ошибка:". $ sql. "
". $ Conn-> ошибка; } $ conn-> close(); ?> - –

-2

Просто используйте этот запрос:

INSERT INTO users (name, surname, city) VALUES ('rock','fixed','london'); 
0

попробуйте следующий код

for ($i=0; $i<= 119; $i++){ 
     //exclude id and do auto increament and primary key 
     $qry = "INSERT INTO `users` (`name`, `surname`, `city`) VALUES (`rock`,`fixed`,`london`)"; 
} 
0

Делать это в одном операторе SQL, без цикла: -

INSERT INTO `users` (`id`, `name`, `surname`, `city`) VALUES (1,`rock`,`fixed`,`london`); 
SELECT NULL, `rock`, `fixed`, `london` 
FROM 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) units 
CROSS JOIN 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 
) tens 

В 2 подзапросы просто возвращает диапазон номеров. С 10 в одном и 12 в другом, когда крест соединен, они возвратятся в общей сложности в 120 рядов. Эти 120 строк - это только ваши фиксированные значения, но с NULL для идентификатора, который автоматически увеличивается в уникальном значении.

Обратите внимание, что вы можете делать большие диапазоны, подобные этому. Например, если вы хотите, чтобы вставить 653 строк (только довольно случайный выбор числа): -

SELECT NULL, `rock`, `fixed`, `london` 
FROM 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) units 
CROSS JOIN 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) tens 
CROSS JOIN 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) hundreds 
WHERE (units.aCnt + 10 * tens.aCnt + 100 * hundreds.aCnt) < 653 

Или задающее поле идентификатора в качестве расчетного значения: -

SELECT 1 + units.aCnt + 10 * tens.aCnt + 100 * hundreds.aCnt, `rock`, `fixed`, `london` 
FROM 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) units 
CROSS JOIN 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) tens 
CROSS JOIN 
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) hundreds 
WHERE (units.aCnt + 10 * tens.aCnt + 100 * hundreds.aCnt) < 653 
+0

Ok @kickstart Эти решения также работали. –

+0

Скорее всего, это будет значительно быстрее, чем сделать 120 отдельных вставок из php. – Kickstart