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

multiples filas/ mismos datos/ un solo INSERT

Estas en el tema de multiples filas/ mismos datos/ un solo INSERT en el foro de Mysql en Foros del Web. Hola, puede alguien ayudarme con esta duda? Necesito insertar varias filas que contienen el mismo valor. Lo he logrado con un ciclo de 1 a ...
  #1 (permalink)  
Antiguo 08/02/2010, 15:40
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Pregunta multiples filas/ mismos datos/ un solo INSERT

Hola, puede alguien ayudarme con esta duda?

Necesito insertar varias filas que contienen el mismo valor. Lo he logrado con un ciclo de 1 a n pero creo debe existir una forma mas eficiente de hacer esto y no tener que accesar n veces a la base de datos para hacer el insert. el ejemplo:

strSQL = "INSERT INTO inventario_neumaticos VALUES (default,0,'" & medida & "'," & prof & ",default," & fecha & ",'" & factura & "','Nuevo','Bodega',default," & bodega & ",0," & rend & ",0,default);"

For i = 1 To Val(txtCantidad)
bd.Execute strSQL
Next

Cualquier luz será agradecida
  #2 (permalink)  
Antiguo 08/02/2010, 15:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: multiples filas/ mismos datos/ un solo INSERT

Esto es más tema de programación, pero la idea es usar inserts mútiples, que se crean :
Código VB:
Ver original
  1. strSQL = "INSERT INTO inventario_neumaticos VALUES "
  2. For i = 1 To Val(txtCantidad)
  3.     strSQL += "(default,0,'" & medida & "'," & prof & ",default," & fecha & ",'" & factura & "','Nuevo','Bodega',default," & bodega & ",0," & rend & ",0,default);"
  4.   If i< Val(txtCantidad)
  5.     strSQL += ", "
  6.   End If
  7. Next
  8. bd.Execute strSQL
Es mucho mejor usar VB.Net...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/02/2010, 16:19
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: multiples filas/ mismos datos/ un solo INSERT

gracias por responder, pero no es tema de programacion, estoy preguntando si existe la manera en mysql de hacer un insert en varias filas a la vez con los mismos datos. :)
  #4 (permalink)  
Antiguo 08/02/2010, 16:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: multiples filas/ mismos datos/ un solo INSERT

Si, si los datos provienen de otro SELECT o de un archivo plano, o bien de un SELECT procesado por cursores en un stored procedure.
Tienes que ser más específico en el caso, porque es una pregunta un poco abstracta.

El problema es que el ejemplo que pusiste era programación, por lo que asumí que buscabas cómo crear la consulta para hacerlo en ese modo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/02/2010, 16:52
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: multiples filas/ mismos datos/ un solo INSERT

lamento no ser muy claro en mi consulta, lo pondré de este modo, algo simplista pero creo que servirá, ¿como construyo el INSERT si deseo agregar a mi base de datos 10 manzanas de una sola vez para poder despues individualizarlas?, por ejemplo

INSERT tabla_frutas (nombre_fruta) VALUES ("manzana")

eso agregaria una fila en mi tabla_frutas pero yo quiero agregar eso 10 veces sin tener que hacer 10 INSERT.

espero no ofender con un ejemplo tan basico, la verdad es que es una base de datos de neumaticos, cuando la empresa compra neumaticos (generalmente estamos hablando de 500 unidades o más) necesito ingresarlos al inventario todos de una vez porque como neumaticos nuevos no tienen un codigo asociado o mas bien son codigo 0, despues cuando los sacamos de bodega para instalarlos en algun bus se les asigna en ese momento un codigo para poder seguirles la vida creando un historico de cada vehiculo en que estuvo y cada incidente que tuvo ese neumatico.

pensé que MySQL tendria alguna forma sencilla de hacer esto, no?
  #6 (permalink)  
Antiguo 08/02/2010, 17:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: multiples filas/ mismos datos/ un solo INSERT

Se entiende el problema, y nos lleva a dos conclusiones:
Por un lado sería más o menos sencillo preparar un Stored Procedure que se encargara del problema, pero no evitaría tener que hacer 10, 100 ó 500 inserts. En ese contexto, la solución llega mejor por programación, ya que allí si se puede preparar un insert múltiple y ejecutarlo:
Código MySQL:
Ver original
  1. INSERT INTO tabla(valores...)  VALUES(valores1), (valores2), ...(valoresN);
Usando eso, puedes hacer un insert de 1000 registros sin que la base pestañee, ya que son mucho más rápidos.

Por otro lado, hay un error conceptual en el diseño del sistema: No hay ninguna razón para crear 500 instancias de ruedas si todas ellas están en el stock indiferenciadas. Solamente tiene sentido hacerlo cuando la guardes en una tabla donde la relaciones con el vehículo, es decir, lo que describes al final:
Cita:
porque como neumaticos nuevos no tienen un codigo asociado o mas bien son codigo 0, despues cuando los sacamos de bodega para instalarlos en algun bus se les asigna en ese momento un codigo para poder seguirles la vida creando un historico de cada vehiculo en que estuvo y cada incidente que tuvo ese neumatico.
Es al ponerlos en el vehículo cuando el neumático comienza a existir como elemento individual, y por tanto es allí donde hay que crear la instancia individual.
Por otro lado, en el stock no tiene sentido poner columnas (atributos) que en definitiva no pertenecen a la entidad Stock, como pareces estar sugiriendo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/02/2010, 19:47
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: multiples filas/ mismos datos/ un solo INSERT

tienes toda la razón, me has ayudado un monton, a veces uno se bloquea un poco y no logra ver toda la "imagen", gracias, voy a reestructurar mis bases porque de hecho para que voy a tener 500 registros iguales en mi BD si aun no se pueden individualizar, muchas gracias!
  #8 (permalink)  
Antiguo 11/02/2010, 10:02
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: multiples filas/ mismos datos/ un solo INSERT

siguiendo tu sugerencia, muy acertada por cierto, hice una redistribucion de mis tablas. bueno eso cambio gran parte del codigo que tenia escrito pero creo que ahora es mucho mas eficiente. me surge una pequeña duda con respecto a una operacion que tenia resuelta de una manera pero que ahora no me es util. hago el sgte INSERT:

"INSERT INTO inventario_bodegas (codigo,medida,profundidad,id_bodega,rend_teorico, factura)
SELECT ????,medida,profundidad,id_bodega,rend_teorico,factura
FROM stock_bodegas
WHERE medida=9
LIMIT 1;"

donde los signos de pregunta deberian ser un numero igual al ultimo codigo(que es un numero correlativo) en la base inventario_bodegas + 1, pero no se como agregarlo a mi sentencia. podrias hecharme una manito?

De hecho me acabo de dar cuenta de que es un poquito más complicado que eso, porque ncesito saber el maximo valor de codigo, pero puede estar en la tabla inventario_bodegas o en la tabla inventario_vehiculos. mmm (con cara de gato abandonado ::help!::)

Última edición por tokkaido; 11/02/2010 a las 10:13
  #9 (permalink)  
Antiguo 11/02/2010, 10:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: multiples filas/ mismos datos/ un solo INSERT

intenta con algo asi..

insert into stock_bodegas values(
( select max(codigo) from stock_bodegas+1),--aki tomas el vlr mas alto del campo codigo+1
medida,
profundidad,
bodega...

eso si lo que quieres es que al momento de agregar te sume con algo de dinámica...
y si no es asi en todo caso ahi está el MAX


espero q te sirva
  #10 (permalink)  
Antiguo 11/02/2010, 10:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: multiples filas/ mismos datos/ un solo INSERT

Es algo parecido a lo que te propone dtellez, aunque su ejemplo te daría un muy probable error de sintaxis, además de tener problemas de optimización.

Código MySQL:
Ver original
  1. INSERT INTO inventario_bodegas (codigo, medida, profundidad, id_bodega, rend_teorico,  factura)
  2. SELECT (MAX(codigo)+1), medida, profundidad, id_bodega, rend_teorico, factura
  3. FROM stock_bodegas
  4. WHERE medida=9
  5. GROUP BY codigo
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 11/02/2010, 10:37
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: multiples filas/ mismos datos/ un solo INSERT

de hecho me fue de mucha ayuda lo de dtellez, construi mi query asi: y funciona


Código MySQL:
Ver original
  1. INSERT INTO  inventario_bodegas (codigo,medida,profundidad,id_bodega,rend_teorico,factura)
  2. SELECT (SELECT MAX(codigo)+1 as codigo
  3. FROM inventario_bodegas),medida,profundidad,id_bodega,rend_teorico,factura
  4. FROM stock_bodegas
  5. WHERE medida=9


lo unico que me falta es poder obtener el MAX de 2 tablas, o sea el valor que sea mayor sea la tabla que sea donde este
  #12 (permalink)  
Antiguo 11/02/2010, 11:03
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: multiples filas/ mismos datos/ un solo INSERT

Encontré la solucion creando el query para el codigo maximo asi:

Código MySQL:
Ver original
  1. SELECT MAX(v.codigo)+1 as codigo
  2. (SELECT MAX(codigo) as codigo FROM inventario_bodegas
  3. SELECT MAX(codigo)
  4. FROM inventario_vehiculos) v

quedando todo la consulta asi:

Código MySQL:
Ver original
  1. INSERT INTO  inventario_bodegas (codigo,medida,profundidad,id_bodega,rend_teorico,factura)
  2. SELECT (SELECT MAX(v.codigo)+1 as codigo
  3. (SELECT MAX(codigo) as codigo FROM inventario_bodegas
  4. SELECT MAX(codigo)
  5. FROM inventario_vehiculos) v),medida,profundidad,id_bodega,rend_teorico,factura
  6. FROM stock_bodegas
  7. WHERE medida=9

espero sea eficiente, gracias por sus prontas respuestas, me evitan grandes dolores de cabeza, jajaja

Etiquetas: filas, insert, multiples
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:17.