2012-09-19 58 views
35

Quiero escribir una secuencia de comandos, con la función de varias consultas insertadas. déjame explicar esto mejor.Insertar varias filas con una sola consulta MySQL

Tengo una entrada de quantity en formato html. y tengo una consulta MySQL para insertar registered user en la tabla. así que quiero que mi función inserte esta consulta para tiempos de "cantidad".

mysql_query("INSERT INTO `pxlot` (realname,email,address,phone,status,regtime,ip) 
VALUES ('$realname','$email','$address','$phone','0','$dateTime','$ip')") 
or die (mysql_error()); // Inserts the user. 

Para insertar esto, por ejemplo, 3 veces. ¿Alguna sugerencia?

+5

Si repite una fila de valores idénticos varias veces dentro de una tabla determinada, lo está haciendo mal. Debe volver atrás y volver a evaluar su diseño de esquema. –

+2

por cierto, mysql_ * está en desuso –

Respuesta

77
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 

http://dev.mysql.com/doc/refman/5.5/en/insert.html

+5

¿cuál es el límite de listas de valores de columna en el enunciado? Quiero decir cuántas tuplas '(1,2)' podemos pasar a una sola instrucción 'INSERT'. – PythonDev

+6

@akshay, realmente no sé la respuesta, sospecho que la limitación no radica en el número de tuplas, sino en el tamaño de la declaración que está controlada por la variable del sistema 'mysql_allowed_packet' mysql. Creo que el valor predeterminado es 1 MB con protocolo máximo de 1 GB. –

18

Estas son algunas maneras de hacerlo

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
from SOMETABLEWITHTONSOFROWS LIMIT 3; 

o

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 

o

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
values ('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
13

En la mayoría de los casos, insertar registros múltiples con una instrucción Insert es mucho más rápido en MySQL que insertar registros con for/foreach loop en PHP.

Supongamos que $ column1 y $ column2 son matrices con el mismo tamaño publicadas por formulario html.

Usted puede crear su consulta como esta:

<?php 
    $query = 'INSERT INTO TABLE (`column1`, `column2`) VALUES '; 
    $query_parts = array(); 
    for($x=0; $x<count($column1); $x++){ 
     $query_parts[] = "('" . $column1[$x] . "', '" . $column2[$x] . "')"; 
    } 
    echo $query .= implode(',', $query_parts); 
?> 

Si los datos se registró durante dos registros de la consulta será:

Insertar en la tabla (column1, column2) VALUES ('datos' , 'datos'), ('datos', 'datos')

0

Si desea insertar varios valores, digamos desde entradas múltiples que tienen di los valores de los postes preferidos pero la misma tabla para insertarlos, simplemente utilice:

mysql_query("INSERT INTO `table` (a,b,c,d,e,f,g) VALUES 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g')") 
or die (mysql_error()); // Inserts 3 times in 3 different rows 
Cuestiones relacionadas