Foros del Web » Programando para Internet » PHP »

insertar registros devueltos en una consulta

Estas en el tema de insertar registros devueltos en una consulta en el foro de PHP en Foros del Web. Como puedo hacer para insertar varios datos ? por ejemplo tengo esta consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original public function FiltrarSaldos ( $CBO_ALMA_CODI , ...
  #1 (permalink)  
Antiguo 27/01/2012, 14:16
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 1 mes
Puntos: 7
insertar registros devueltos en una consulta

Como puedo hacer para insertar varios datos ?

por ejemplo tengo esta consulta

Código MySQL:
Ver original
  1. public function FiltrarSaldos($CBO_ALMA_CODI,$TXT_MOVI_FINI,$TXT_MOVI_FFIN) {
  2.        
  3.         if ($CBO_ALMA_CODI != 'Seleccione' && !empty ($TXT_MOVI_FINI) && !empty ($TXT_MOVI_FFIN)){
  4.             $query = sprintf("SELECT dmov.PROD_CODI, prod.PROD_NOMB,
  5.                              dmov.DMOV_SINI, sum(dmov.DMOV_INGR) as DMOV_INGR, sum(dmov.DMOV_SALI) AS DMOV_SALI, dmov.DMOV_SINI + sum(dmov.DMOV_INGR) - sum(dmov.DMOV_SALI) AS DMOV_SFIN, umed.UMED_NOMB
  6.                              FROM csto_dmov dmov
  7.                              INNER JOIN csto_movi movi on movi.MOVI_CODI = dmov.MOVI_CODI
  8.                              INNER JOIN csto_prod prod on prod.PROD_CODI = dmov.PROD_CODI
  9.                              INNER JOIN csto_umed umed on umed.UMED_CODI = prod.UMED_CODI
  10.                              WHERE movi.ALMA_CODI = ('%s')
  11.                              AND   movi.MOVI_FECH < ('%s')
  12.                              GROUP BY dmov.PROD_CODI
  13.                              ORDER BY prod.PROD_NOMB ASC
  14.                             ",$CBO_ALMA_CODI, $TXT_MOVI_FINI, $TXT_MOVI_FFIN);
  15.         }        
  16.        
  17.         $_SESSION["Consulta"]=$query;
  18.         $result = mysql_query($query) or die ("Error en: $query. " . mysql_error());
  19.         $output = array();
  20.         while ($row = mysql_fetch_object($result)) $output []= $row;
  21.         return $output;
  22.     }

y me devuelve serca de 60 registros ( producto codigo, nombre, etc )

como puedo hacer para insertar todos los codigos que me devuelve esa consulta en otra tabla ?

gracias
  #2 (permalink)  
Antiguo 27/01/2012, 14:24
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años
Puntos: 394
Respuesta: insertar registros devueltos en una consulta

Código PHP:
Ver original
  1. $objeto = new Clase;
  2. $metodo = $objeto->FiltrarSaldos($parametros);
  3.  
  4. foreach($metodo as $valor){
  5. //conectando a la BD
  6. mysql_query("INSERT INTO una_tabla (campor) VALUES ($valor)");
  7. }

Es un ejemplo, analizalo y acomodalo a tu codigo por favor.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 27/01/2012, 14:57
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: insertar registros devueltos en una consulta

pero valor inserta que campos ?
  #4 (permalink)  
Antiguo 27/01/2012, 15:03
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años
Puntos: 394
Respuesta: insertar registros devueltos en una consulta

Como te explique es solo un ejemplo, pero vamos a mirarlo detenidamente.

Vos tenes un funcion que retorna un MATRIZ con los resultados de la consulta verdad ? si eso es lo que sucede la funcion te devolvera algo como esto:

Código PHP:
Ver original
  1.     array(campo1, campo2, campo3, campoN),
  2.     array(campo1, campo2, campo3, campoN),
  3.     array(campo1, campo2, campo3, campoN),
  4. )

Donde cada "array" interno es un registro de tu base de datos, y cada "campo" es una columna de tu base de datos.

Según lo anteriormente expuesto solo deberás recorer el array principal para realizar el insert en la otra tabla con los campos que tienen los array internos
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #5 (permalink)  
Antiguo 27/01/2012, 15:10
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: insertar registros devueltos en una consulta

CONTROLADOR
Código PHP:
Ver original
  1. case "FiltrarSaldos":
  2.         $ReturnDetalleMovimiento = $detalle_movimiento ->ObtenerUltimosSaldosFinales($CBO_ALMA_CODI,$TXT_MOVI_FINI_2);

MODELO
Código MySQL:
Ver original
  1. public function ObtenerUltimosSaldosFinales($CBO_ALMA_CODI,$TXT_MOVI_FINI) {
  2.         $query = sprintf("SELECT dmov.PROD_CODI, movi.ALMA_CODI,
  3.                          dmov.DMOV_SINI + sum(dmov.DMOV_INGR) - sum(dmov.DMOV_SALI) AS DMOV_SFIN
  4.                          FROM csto_dmov dmov
  5.                          INNER JOIN csto_movi movi on movi.MOVI_CODI = dmov.MOVI_CODI
  6.                          WHERE movi.ALMA_CODI = ('%s')
  7.                          AND   movi.MOVI_FECH < ('%s')
  8.                          GROUP BY dmov.PROD_CODI
  9.                         ",$CBO_ALMA_CODI, $TXT_MOVI_FINI);
  10.                  
  11.         $_SESSION["Consulta"]=$query;
  12.         $result = mysql_query($query) or die ("Error en: $query. " . mysql_error());
  13.         $output = array();
  14.         while ($row = mysql_fetch_object($result)) $output []= $row;
  15.         return $output;
  16.     }
MODIFIQUE LA CONSULTA AHORA SOLO ME DEVOLVERA PROD_CODI, ALMACEN_CODIGO, SALDO FINAL, LOS 3 DATOS LOS USARE

PERO VOY A HACER UN UPDATE, LO QUE QUIERO SABER ES COMO HACER EL UPDATE.

PORQUE USO MVC ( MODELO VISTA CONTROLADOR)

ESTA ES MI UPDATE
Código MySQL:
Ver original
  1. UPDATE csto_pral
  2.                      SET  PRAL_SINI = ('%s') -> LO QUE DEVUELVE LA CONSULTA
  3.                          ,PRAL_INGR = 0
  4.                          ,PRAL_SALI = 0
  5.                          ,PRAL_SFIN = ('%s')  -> ES IGUAL A PRAL_SINI
  6.                      WHERE PROD_CODI = ('%s') -> LO QUE DEVUELVE LA CONSULTA
  7.                      AND ALMA_CODI = ('%s') -> LO QUE DEVUELVE LA CONSULTA

EN EL UPDATE USO LOS 3 CAMPOS QUE DEVUELVE MI CONSULTA

GRACIAS
  #6 (permalink)  
Antiguo 27/01/2012, 15:19
 
Fecha de Ingreso: julio-2006
Mensajes: 9
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: insertar registros devueltos en una consulta

Lo que yo entiendo esque esa consulta te esta devolviendo los valores que despues quieres insertar, bueno lo puedes hacer en la misma consulta que te devuelve los valores pero claro la consulta tiene que devolver las mismas columnas de lo que vas a insertar. ejemplo:

INSERT INTO tabla_insertar (campo1,campo2)
SELECT campo1, campo2
FROM tabla_consulta;

en tu caso creo quedaria asi:

Código PHP:
Ver original
  1. $query = sprintf(" INSERT INTO tabla_insertar  (PROD_CODI,PROD_NOMB,etc)
  2. SELECT dmov.PROD_CODI, prod.PROD_NOMB, 5.                              dmov.DMOV_SINI, sum(dmov.DMOV_INGR) as DMOV_INGR, sum(dmov.DMOV_SALI) AS DMOV_SALI, dmov.DMOV_SINI + sum(dmov.DMOV_INGR) - sum(dmov.DMOV_SALI) AS DMOV_SFIN, umed.UMED_NOMB6.                              FROM csto_dmov dmov7.                              INNER JOIN csto_movi movi on movi.MOVI_CODI = dmov.MOVI_CODI8.                              INNER JOIN csto_prod prod on prod.PROD_CODI = dmov.PROD_CODI9.                              INNER JOIN csto_umed umed on umed.UMED_CODI = prod.UMED_CODI10.                              WHERE movi.ALMA_CODI = ('%s')11.                              AND   movi.MOVI_FECH < ('%s')12.                              GROUP BY dmov.PROD_CODI13.                              ORDER BY prod.PROD_NOMB ASC14.                             ",$CBO_ALMA_CODI, $TXT_MOVI_FINI, $TXT_MOVI_FFIN);


pero te repito tu consulta tiene que devolver el mismo numero de columnas y claro del mismo tipo de dato que las que vas a insertar
  #7 (permalink)  
Antiguo 27/01/2012, 15:22
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: insertar registros devueltos en una consulta

si pero me equivoque no era insertar era update :D y si devuelve 3 campos y esos 3 campos los uso, como te detallo arriba.
  #8 (permalink)  
Antiguo 27/01/2012, 15:44
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: insertar registros devueltos en una consulta

Alguien puede apoyarme ?
  #9 (permalink)  
Antiguo 27/01/2012, 15:59
 
Fecha de Ingreso: julio-2006
Mensajes: 9
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: insertar registros devueltos en una consulta

la variable $output no te guarda todos los registros y sus respectivos campos?, si es así porque no haces un for y dentro de el for creas la linea de update y claro va a ir tomando los valores de $output

foreach($output as $outputupdate)
{
$idproducto=$outputupdate['PROD_CODI'];
$cantidad=$outputupdate['PROD_NOMB'];
//etc etc todos los campos devueltos en la consultay despues agregas el update y actualizas con los valores que obtienes arriba.

$actualizacion="update csto_pral ..."
}

Última edición por thealfred; 27/01/2012 a las 16:04

Etiquetas: mysql, registro, registros, tabla
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 15:51.