Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Insertar Varios Registros a la vez

Estas en el tema de Insertar Varios Registros a la vez en el foro de Mysql en Foros del Web. hola a todos, tengo un problemilla, estoy intentando insertar varios registros a la bd, para lo cual utilizo un bucle que se encargue de eso, ...
  #1 (permalink)  
Antiguo 13/10/2006, 02:10
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Insertar Varios Registros a la vez

hola a todos, tengo un problemilla, estoy intentando insertar varios registros a la bd, para lo cual utilizo un bucle que se encargue de eso, la duda que tengo es sobre si existe un comando o sentencia especial que me permita insertar X registros a la vez en una sola llamada, comprendo que si esto se puede hacer, seria muy eficiente eh visto que se puede hacer esto pero para eliminar datos, con el parametro IN, ahora queria saber si tambien se puede hacer con el Insert, he probado pero nada, si alguien tuviera alguna idea, de antemano gracias
  #2 (permalink)  
Antiguo 13/10/2006, 08:16
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Se hace el INSERT normal, luego el nombre de los campos que vas a insertar y finalizas con los valores encerrados en paréntesis grupo por grupo.

Código PHP:
INSERT INTO tabla (campo1campo2campo3VALUES
(v1_1v1_2v1_3),
(
v2_1v2_2v2_3),
(
v3_1v3_2v3_3); 
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 13/10/2006, 08:42
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
De acuerdo Ummmmm

Hola, pues como que el codigo que indicas es tan solo un insert, para un registro, claro de varios campos. Lo que yo deseo es agregar Varios registros, ejemplo:
para 3 registros
Código:
 Insert Into mi_tabla(mis_campos) values(mi_datos);
 Insert Into mi_tabla(mis_campos) values(mi_datos);
 Insert Into mi_tabla(mis_campos) values(mi_datos);
y que pasaria para 100 registros...
Código:
 Insert Into mi_tabla(mis_campos) values(mi_datos); // 1
 Insert Into mi_tabla(mis_campos) values(mi_datos); // 2
 Insert Into mi_tabla(mis_campos) values(mi_datos); // 3
 ...
 Insert Into mi_tabla(mis_campos) values(mi_datos); // 100
creo que tendria que hacer eso verdad, claro me dirias, colocalo en un bucle y listo, correcto, el detalle, que para hacer eso, debo conectarme al servidor en cada Insert, y pues como que satura al server para ello uso php y mysql, lo que pasa es que en un link -->http://php.apsique.com/node/383, indican como borrar multiples registros de una sola con php y mysql, y queria saber si se podia hacer lo mismo con el insert, si se puede seria excelente, mis conocimientos de mysql, jeje son muy escasos solo lo basico , en fin espero me puedan ayudar con el inconveniente gracias de antemano a cualquier respuesta
  #4 (permalink)  
Antiguo 13/10/2006, 09:02
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Si te fijas, solo puse un INSERT luego los campos de la tabla que voy a alterar, luego VALUE y finalizo con los valores encerrado en paréntesis cada rango, o sea, NO SE TIENE QUE PONER NUEVAMENTE INSERT TABLA Y CAMPOS. Cada Rango se separa por una coma y el último rango con un punto y coma.

Ahora, si lo queres hacer por programación, puede que se te haga más fácil y para eso, debes preguntar en la sección correspondiente (PHP, ASP, Java, Javascript, etc).
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #5 (permalink)  
Antiguo 13/10/2006, 11:39
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
De acuerdo no m habia dado cuenta...

Hola, si tienes razon, no me habia dado cuenta, pero hay un detalle, la cantidad de registros a insertar es variante, por lo cual el script no me ayuda mucho, ya que al final, tendria que hacerlo, con un for para concatenar la cantidad de registros a guardar, y e ai el detalle, por que nuevamente utilizo un for... y no quiero eso . bueno espero me haya hecho entender, de antemano gracias por la respuesta BrujoNic
  #6 (permalink)  
Antiguo 13/10/2006, 12:06
Avatar de _Keny_  
Fecha de Ingreso: abril-2006
Mensajes: 326
Antigüedad: 18 años
Puntos: 1
crea un procedimiento basandote en lo que te puso brujonic
__________________
Está bien tener sombrero por si se presenta una buena ocasión para quitárselo


http://ienk.elbruto.es/
  #7 (permalink)  
Antiguo 13/10/2006, 12:34
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Ok, si necesitas utilizar programación, ve al foro correspondiente, coloca el código que tengas para que te ayuden.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #8 (permalink)  
Antiguo 21/10/2006, 08:08
 
Fecha de Ingreso: abril-2004
Mensajes: 3
Antigüedad: 20 años, 1 mes
Puntos: 0
Sonrisa

Hola!
Les quería consultar algo relacionado con este tema que enviaron. Estoy tratando de completar dos tablas de la misma base con algunos datos repetidos, es decir, desde un formulario donde cargo datos llevo info a las tablas. Ahora bien, como recien me inicio en esto estuve haciendo algunas pruebas y con lo siguiente pude completar las dos tablas:

$insertSQL = sprintf("INSERT INTO tabla (dato1, dato2, dato3) VALUES (%s, %s, %s)",
GetSQLValueString($_POST['dato1'], "text"),
GetSQLValueString($_POST['dato2], "text"),
GetSQLValueString($_POST['dato3'], "text");

$insertSQL2 = sprintf("INSERT INTO tabla2 (dato1) VALUES (%s)",
GetSQLValueString($_POST['dato1'], "text"));

Ahi se ven los campos con el mismo nombre que pude completar (dato1). Esto funcionó . Ahora, el problema se me presenta cuando a tabla2 le agrego mas campos a completar. Por ejemplo dato5, dato6 con sus respectivos values. Me dá el siguiente error:

Warning: sprintf() [function.sprintf]: Too few arguments in "ruta de donde está el archivo"\ingreso.php on line 67
Query was empty

Esa linea conrresponde al ultimo: GetSQLValueString($_POST['dato'], "text")); que ingreso. Mi duda es: si funciona para un registro, debería tambien funcionar para los demas?

Desde ya muchas gracias.

Saludos.
  #9 (permalink)  
Antiguo 21/10/2006, 09:33
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Hola JoseAlberto, bienvenido...

Disculpa pero estas confundido con tu pregunta ya que esta sección es de Base de Datos y específicamente de MySQL.

Pero tu consulta es directamente de código y no encaja en esta categoría, aquí se hacen consultas de sentencias SQL y no de código, para eso ya existe una sección y lo más razonable es que hagas tu consulta en esa sección.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #10 (permalink)  
Antiguo 05/09/2010, 19:49
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Insertar Varios Registros a la vez

Hola, si quieres hacer dinámico (es decir agregar datos indefinidos a la tabla) en una sola llamada al servidor, podrías hacerlo de la siguiente forma:

Código PHP:

$insertSQL 
="INSERT INTO tabla (dato1, dato2) VALUES ";

for (
$i $primerDato$i $ultimoDato$i++) { 
   
$insertSQL=$insertSQL.sprintf("(%s, %s), ",
                       
GetSQLValueString($primerDato"text"),
                       
GetSQLValueString($i"int"));
 }
    
$insertSQL=$insertSQL.sprintf("(%s, %s);",
                       
GetSQLValueString($primerDato"text"),
                       
GetSQLValueString($ultimoDato"int"));
                       
  
mysql_select_db($database$conexion);
  
$Result1 mysql_query($insertSQL$conexion) or die(mysql_error()); 
Si te das cuenta en este ejemplo el primer dato es el mismo para todos tus registros y el que varía es el segundo dato, ya lo puedes ajustar a tus necesidades.

Saludos!!

-----
Se que el post es muy viejo, pero igual a alguien le puede servir =)
  #11 (permalink)  
Antiguo 07/03/2011, 11:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 168
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Insertar Varios Registros a la vez

SALUDOS YO TENGO EL MISMO INCONVENIENTE
ESTE ES EL CODIGO QUE UTILIZO

Código PHP:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO servicio_suministro (id_cita, codigo, descripcion, valor) VALUES
                       (codigo, descripcion, valor),
                       (codigo, descripcion, valor),
                       (codigo, descripcion, valor)"
,
                       
GetSQLValueString($_POST['id_cita'], "int"),
                       
GetSQLValueString($_POST['codigo'], "text"),
                       
GetSQLValueString($_POST['descripcion'], "text"),
                       
GetSQLValueString($_POST['valor'], "text")); 
Y el error es este Column count doesn't match value count at row 1
  #12 (permalink)  
Antiguo 07/03/2011, 12:39
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 2 meses
Puntos: 9
Respuesta: Insertar Varios Registros a la vez

Yo uso este y trabaja a la perfección:

Código MySQL:
Ver original
  1. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  2. for ($x=$primer_dato; $<=$ultimo_dato; $x++) {
  3.   $insertSQL = sprintf("INSERT INTO servicio_suministro (id_cita, codigo, descripcion, valor) VALUES (codigo, descripcion, valor),
  4. GetSQLValueString($_POST['id_cita'.$x.''], "int"));
  5. GetSQLValueString($_POST['codigo'.$x.''], "int"));
  6. GetSQLValueString($_POST['descripcion'.$x.''], "int"));
  7. GetSQLValueString($_POST['valor'.$x.''], "int"));
  8.  
  9. mysql_select_db($database, $conexion);
  10.  $Result1 = mysql_query($insertSQL, $conexion) or die(mysql_error());
  11. }
  12. }

y el formulario condicionarlo a un ciclo:

Código PHP:
Ver original
  1. <? do { $y= $y+1 ?>
  2. <input type="text" name="tal<?php echo $y; ?>"> <!-// y asi con todos
  3. <?php } ?>
  #13 (permalink)  
Antiguo 07/03/2011, 12:41
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 2 meses
Puntos: 9
Respuesta: Insertar Varios Registros a la vez

por cierto, debes terminar el ciclo, me comí esa parte jeje:
Código PHP:
Ver original
  1. while (condición);
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:53.