Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20/11/2011, 21:52
Bier
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Bucles anidados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Desde la optica de programación en un lenguaje, no es este el foro donde debes preguntar eso. Cada lenguaje tiene su propio foro y esas preguntas se responden allí (Normas del Foro de Bases de Datos).
A nivel de SQL, la consulta que te indiqué (INSERT... SELECT...) realiza precisamente esa tarea, solo que lo hace en una sola sentencia, con la salvedad de que un UPDATE es una sentencia completamente diferente, y se debe realizar con una sintaxis distinta.

En SQL uno trata de no realizar procesos iterativos a menos que sean absolutamente necesarios porque consumen innecesariamente recursos, y no son optimizables. Además, cuando se deben hacer, se realizan por medio de stored procedures, y no con simples consultas, ya que requieren el uso de cursores, handlers y variables locales de MySQL.
Por lo demás, ¿para qué hacer un proceso iterativo, donde el DBMS puede encargarse de la tarea con una sola consulta?

Resumiendo: Si tu pregunta es cómo hacerlo en PHP, estás en el foro equivocado. Si quieres hacerlo en SQL, olvídate del PHP y empecemos a hablar de PL/SQL.
Bien, agradezco tu tiempo, trataré de plantear mi necesidad de otra forma.
  1. Tengo la tabla1 MySQL con 1 millón de filas y cada fila con varios campos.
  2. Debo leer cada fila de esta tabla1, y de acuerdo a ciertos valores almacenados en los campos de cada fila, realizar operaciones diversas con la información contenida.
  3. Los resultados de las operaciones y dependiendo de diversas variables, en algunas veces deberé almacenar en una tabla2 ya sea con INSERT o UPDATE. En algunos casos el resultado de fila no me será relevante y no lo almacenaré.
  4. Puede darse el caso de algunos resultados que deba almacenarlos en una tabla3 (con INSERT o UPDATE).
  5. Como resultado, tabla2 podría llegar a 400 mil filas y tabla3 a 100 filas.
  6. Las tablas: 2 y 3 vendrían a ser resumenes de información de tabla1.

Yo imaginé hacer un lo siguiente:
  1. select a la tabla1
  2. Dentro del WHILE realizar los cálculos necesarios
  3. En base a los resultados, determinar si debo INSERTAR una nueva fila a la tabla2 o hacer un UPDATE.
  4. Puede darse el caso de requerir INSERTAR o UPDATE incluso a tabla3 y/o tabla4.

Mi pregunta específica:
¿Es posible tener un SELECT, y dentro del WHILE poder tener INSERT o UPDATE a una tabla2, tabla3, tabla4, etc.?

Agradezco la ayuda para que yo pueda entender lo anterior.
He buscado en Google, y hay varios planteamientos a esta pregunta, curiosamente en todos los que he leído siempre han quedado sin respuesta.

En algún mensaje leí que esto solo encuentra soportado a partir de MySQL5, por lo que me atreví a preguntar, por si alguien ha requerido resolver una necesidad similar a mi requerimiento.

Gracias nuevamente.