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

Como ejecutar un query N veces?

Estas en el tema de Como ejecutar un query N veces? en el foro de Mysql en Foros del Web. Hola, necesito hacer inserciones en una tabla con los mismos datos N veces. Actualmente lo hago con un For desde php: Código: For … INSERT ...
  #1 (permalink)  
Antiguo 28/10/2008, 14:27
 
Fecha de Ingreso: marzo-2008
Mensajes: 173
Antigüedad: 16 años, 1 mes
Puntos: 0
Como ejecutar un query N veces?

Hola, necesito hacer inserciones en una tabla con los mismos datos N veces.
Actualmente lo hago con un For desde php:

Código:
For …
	INSERT ….
Independientemente del lenguaje de programación, quería saber si existe alguna forma de hacer que un query se ejecute N nuemero de veces (sin usar ciclos: for, while, etc). Bueno si alguien sabe ahí me avisa por favor.

De antemano gracias.
  #2 (permalink)  
Antiguo 28/10/2008, 14:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como ejecutar un query N veces?

ultimateZero,

sólo por curiosidad, ¿qué datos insertas?, pues si son los mismos datos insertados en los mismos campos un número determinado de veces, yo usaría una sola consulta de inserción múltiple. Naturalmente, tendría que iterar, pero lo haría no para insertar, sino para conformar la cadena que luego insertaré en una sola inserción.
  #3 (permalink)  
Antiguo 28/10/2008, 15:05
 
Fecha de Ingreso: marzo-2008
Mensajes: 173
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como ejecutar un query N veces?

Hola jurena, gracias pro tu interés. si son los mismos datos en los mismos campos, son los datos de los cursos que se imparten en la institución para la que estoy haciendo esto. Aunque desde el principio estuve en el diseño del sistema y estuve de acuerdo, ahora creo que fue lo menos optimo hacerlo de la forma que lo hacemos, desafortunadamente no soy el único programador y el proyecto ya esta muy avanzado como para cambiar el diseño de datos.

Te explico como lo hacemos. Los cursos pueden ser individuales o grupales y la información que guardamos de estos son: id (autoincrement), nombre del curso, grupo, capacidad, tipo (individual o grupal).

Por ejemplo, Si se trata de un curso grupal para 5 alumnos la inserción con los siguientes datos seria así:
Nombre = Matemáticas
Grupo = A
Capacidad = 5
Tipo = grupal

El mismo ejemplo pero si se tratara de un curso al que a los alumnos se les imparte de manera individual ósea de uno por uno los datos a insertar serian los siguientes
Nombre = Matemáticas
Grupo = A
Capacidad = 1
Tipo = individual
------------------------
Nombre = Matemáticas
Grupo = A
Capacidad = 1
Tipo = individual
------------------------
Nombre = Matemáticas
Grupo = A
Capacidad = 1
Tipo = individual

… y asi hasta los 5.

Como comentaba en el primer mensaje actualmente el INSERT lo hago con un FOR, en este ejemplo 5 veces. Mi duda, es si existe alguna manera de indicar al query que se ejecute ese número de veces. Si existe algo así como el LIMIT, pero lo contrario.

Bueno no se si me explique bien, si no, háganmelo saber.
Saludos, gracias.
  #4 (permalink)  
Antiguo 28/10/2008, 16:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como ejecutar un query N veces?

Partamos de la base que hacer que una operación se repita N veces implica siempre el uso de un ciclo, sea cual sea el que uses y sea cual fuere el lenguaje en cuestión.
Es simple lógica: todo proceso que se repite N veces es un ciclo de ejecución...
El problema es que parece que la cosa está un poco confusa. Lo que tu pareces querer expresar es si es posible realizar, como dice jurena, un insert múltiple de registros en un numero limitado de ejecuciones -preferentemente en una sola- y que no dependa del lenguaje.
Veamos:
- Si no se puede modificar el modelo de datos, solamente se puede hacer por la aplicación y allí juega el lenguaje de programación.
- Si lo deseas hacer fuera del lenguaje, solamente te queda modificar la base de datos para construir un SP con parámetros adecuados que te permitan hacer el proceso... en un ciclo repetitivo.

En realidad la cosa, como la estás planteando, se resuelve por código en la aplicación mucho más fácilmente que cualquier otra cosa.
1. Una solución es que, tomando una tabla donde almacenes los datos a insertar, genere una sentencia de SQL de este tipo:
Código sql:
Ver original
  1. INSERT INTO TABLA1(campo1, campo2, campon)
  2. VALUES(valor1, valor2, valorN), (valor1, valor2, valorN), (valor1, valor2, valorN), ..., (valor1, valor2, valorN);
Por cuestiones de performance no es conveniente que los conjuntos de datos sean demasiados, a fin de evitar que el string se vuelva demasiado grande.
2. Otra solución, mucho más compleja y que yo he usado en algunas ocasiones, es crear un conjunto anidado de consultas y subconsultas que me devuelvan la tabla a insertar completa. En ese caso simplemente escribo una sentencia:
Código sql:
Ver original
  1. INSERT INTO x
  2. SELECT *
  3. FORM (subconsultas anidadas) Tabla1;
Esto lo he realizado en algunos casos llegando a ocho (8) niveles de anidamiento con algunos JOIN adicionales. ¿Por qué tan compleja? Porque en el peor escenario me consume 18 segundos de proceso, mientras que hacerlo en la aplicación me insume algo más de un minuto...
Obviamente, en tu caso, para usar la segunda opción los datos primarios deben existir en la base y no en la aplicación.
__________________
¿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 28/10/2008, 23:45
 
Fecha de Ingreso: marzo-2008
Mensajes: 173
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como ejecutar un query N veces?

hola gnzsoloyo.

Primero que nada, muchas gracias por tu tiempo para responder mi duda, sin embargo creo que no entendiste bien lo que preguntaba.

[QUOTE=gnzsoloyo;2638497]Partamos de la base que hacer que una operación se repita N veces implica siempre el uso de un ciclo, sea cual sea el que uses y sea cual fuere el lenguaje en cuestión.
Es simple lógica: todo proceso que se repite N veces es un ciclo de ejecución...[QUOTE]

Yo ya se, y lo se muy bien que si alguna operación se tiene k hacer N veces obviamente tiene que haber un ciclo jeje lo tengo muy claro, si no es en el lenguaje de programación o en mi query de alguna forma el manejador de bd lo tiene que hacer. De hecho como comente YA lo resolví con un ciclo y muy probablemente así lo voy a dejar.

Y las soluciones que me planteas yo las se, pero es justamente lo que NO quiero hacer, escribir el código de un ciclo, ya sea en el lenguaje de programación o en SQL como dices en el SP. Pero repito, es justamente lo que no quiero hacer. No quiero tener que crear un sp o escribir un ciclo en el lenguaje.

Lo único que quería preguntarles (para futuras situaciones poder usarlo) es si existe algo, no se … emm … digamos, … inventemos, REPEAT !!!! (La verdad ignoro si existe esta instrucción en SQL). Pero que con una simple palabra se ejecute algo N veces, algo así:

INSERT INTO tabla(x,y,z) VALUES(a,b,c) REPEAT 5

yo se que hacerlo con un ciclo en el lenguaje de programación o en SQL en un SP no me tomara mas de 1 minuto, pero una instrucción de una sola palabra tomaría mucho menos tiempo.

Bueno era una simple curiosidad que me surgió. No es un gran problema que no me permita avanzar, como dije desde un principio ya lo tengo solucionado con un FOR y si no existe tal cosa, ni modo, toda la vida lo he hecho con alguna de las formas que comentaste.

Bueno no me queda más que agradecer a ambos por tomarse tiempo para mi duda, y si alguien mas sabe como, pues ya sabe compártalo

Saludos.
  #6 (permalink)  
Antiguo 29/10/2008, 02:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como ejecutar un query N veces?

Yo no sé que exista nada para hacer eso así, y nada más puedo añadir a lo dicho y bien dicho por gnzsoloyo. Yo me convenzo cada vez más de que tengo que empezar a 'jugar' con store procedures. Sí quiero decirte lo que yo en tu caso haría dadas unas determinadas condiciones, y esto ya tiene poco de base de datos. Si es frecuente la entrada de datos como dices por grupos o individual, y siempre sobre la misma base, yo haría una función en programación en la que al pasar los datos lanzase una consulta de inserción u otra. Si pasas grupo y el número o individual y el número, dependiendo de ese dato, cargará el número como valor o hará una iteración usando ese número como $i en el for que crea el string. Si eso cubre todas las situaciones podrías, si no lo tenéis así, hacer alguna prueba. Es todo lo que yo puedo decirte sobre el tema.
  #7 (permalink)  
Antiguo 29/10/2008, 13:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 173
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como ejecutar un query N veces?

Si tal parece que no existe tal cosa, ni modo.

Por cierto muy buena idea jurena aunque no es lo que buscaba, de todas formas me diste una muy buena idea.

gracias y bueno creo que podemos dar por terminado este tema.
saludos
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 09:50.