Foros del Web » Programando para Internet » PHP »

Procesado dinámico

Estas en el tema de Procesado dinámico en el foro de PHP en Foros del Web. Buenas, estoy intentando crear un script para analizar datos de unos campos concretos de una tabla, y guardar los resultados en otra tabla, el código ...
  #1 (permalink)  
Antiguo 09/01/2012, 10:24
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 1
Pregunta Procesado dinámico

Buenas, estoy intentando crear un script para analizar datos de unos campos concretos de una tabla, y guardar los resultados en otra tabla, el código que estoy utilizando es este:

Código PHP:
<?php
//            CONEXION
//=======================================================================
//conexion con la BBDD
$conexion=@mysql_connect("localhost""user""pass");
mysql_select_db"BBDD"$conexion);
//=======================================================================

for ($id=1$id<=448$id++){
$consulta="SELECT id, n1, n2, n3, n4, n5 FROM tabla_datos WHERE id=$id";
$resultadomysql_query ($consulta$conexion);
$datos=mysql_fetch_assoc($resultado);

  for (
$n=1$n<=50$n++){
      if(
$n==$datos['n1'] or $n==$datos['n2'] or $n==$datos['n3'] or $n==$datos['n4'] or $n==$datos['n5']){ $b='1';}
      else{ 
$b='0';}
  
$consulta2="INSERT INTO tabla_resultados(campo_res".$n.") VALUES ('$b')";
  
$resultado2=mysql_query ($consulta2$conexion);
    }

}
?>
alguien sabría indicarme donde está el fallo por favor?

Saludos.
  #2 (permalink)  
Antiguo 09/01/2012, 11:26
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Procesado dinámico

Yo creo que el primer fallo es que no explicas bien lo que quieres lograr, y menos qué es lo que obtienes o si te da un fallo al ejecutarlo.
  #3 (permalink)  
Antiguo 09/01/2012, 12:05
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Procesado dinámico

Hola ocp001a! Gracias por responder tan pronto.
Pensé que viendo el código se intuía lo que quería hacer, pero tienes razón, apenas he aportado información.
Tengo un tabla con los datos de este estilo:

id | n1 | n2 | n3 |
___________________
1 | 16 | 4 | 32 |
2 | 1 | 10 | 42 |
3 | ... | ... | ... |

Lo que yo quiero, es ir fila a fila comprobando una serie de numeros(los que paso en el for), y los resultados de esa comprobación guardarlos en otra tabla de esta forma:

idr | r1 | r2 | r3 | r4 | r5 | r6 | r7 | .............
______________________________________
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | ...............
2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | ...............
3 | ... | ... | ... | ... | ... | ... | ... | ...............

Mas o menos...
-selecciono una fila por ciclo del bucle, en orden ascendente (de esta forma me coinciden exactas la cantidad de filas y los id de las dos tablas)
-compruebo si en alguno de los campos de la fila aparece alguno de los números que me interesan.
-en la otra tabla, por cada número que compruebo existe un campo, en el cual marcamos 0 o 1 según aparezca o no

el segundo bucle, o sobra, o está mal implementado, ya que guarda demasiados registros, y sin ningún sentido.

Espero haberme explicado con claridad (aunque está claro que no es mi fuerte explicarme jeje).

Saludos!
  #4 (permalink)  
Antiguo 09/01/2012, 12:19
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Procesado dinámico

Bueno, primero, podrías sustituir el primer for con un while
segundo, en vez de tanto if($n==$datos['n1'] podrías comparar con in_array para ver si el dato que buscas está en el arreglo.
tercero, el segundo for lo manejas de 1 a 50, mientras que en el ejemplo sólo tomas 5 campos, por lo que en tabla_resultados metes 50 registros. Quizá lo que deberías hacer es crear una fila en tabla_resultados en la primer vuelta y luego updates en las siguientes, aunque no aún no comprendo del todo el por qué de esa comparación.
  #5 (permalink)  
Antiguo 09/01/2012, 14:13
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 1
Busqueda Respuesta: Procesado dinámico

Antes de nada comentar que estoy muy verde en php, estoy aprendiendo, y agradecería algún ejemplo gráfico de código acompañando la sugerencia, por otro lado yo me comprometo a ofrecer la solución si logro encontrarla por mi cuenta, para que el hilo resulte mas enriquecedor para el que llegue aquí intentando resolver una duda.

Continuando con el hilo, por fin he conseguido recabar la información que necesito, en el orden adecuado, y meterlo en un array

Código PHP:
<?php
for ($id=1$id<=448$id++){
$consulta="SELECT id, n1, n2, n3, n4, n5 FROM euromillones_min WHERE id=$id";
$resultadomysql_query ($consulta$conexion);
$datos=mysql_fetch_assoc($resultado);
  for (
$n=1$n<=50$n++){
      if(
$datos["n1"]==$n or $datos["n2"]==$n or $datos["n3"]==$n or $datos["n4"]==$n or $datos["n5"]==$n){ $b=1; }
      else{ 
$b=0; }
$mi_array[$n]=$b;
    }
}
?>
el array contiene un número de índices igual al de campos de la tabla que lo recibe, podrías indicarme como hago para meter un array por fila? explicado de una forma más gráfica lo que quiero hacer:





Saludos.
  #6 (permalink)  
Antiguo 09/01/2012, 15:07
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Procesado dinámico

Bueno, con código, podrías hacer esto:
Código PHP:
Ver original
  1. $consulta=mysql_query("SELECT id, n1, n2, n3, n4, n5 FROM euromillones_min WHERE id=<449 order by id ASC");//consultas id menores a 448 ordenado ascendente.
  2. for ($n=1; $n<=50; $n++)
  3.     $campo[]="campo_res$n";//creas los campos campo_res1 a campo_res50
  4. $campo=implode(",",$campo);//los unes por comas, así: campo_res1,campo_res2...
  5. while($fila=mysql_fetch_assoc($consulta)){//en $fila recogemos la fila de la bd en forma de arreglo
  6.     for ($n=1; $n<=50; $n++){
  7.         if(in_array($n,$fila))//si en el arreglo fila existe el valor de n
  8.             $mi_array[$n]=1;
  9.         else
  10.             $mi_array[$n]=0;
  11.     }
  12.     $valores=implode(",",$mi_array);//unimos el arreglo $mi_array separado por comas, así: 1,0,0,1,1....
  13.     $consulta2=mysql_query("INSERT INTO tabla_resultados($campo) VALUES ($valores)";
  14. }
  #7 (permalink)  
Antiguo 10/01/2012, 05:25
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 1
Información Respuesta: Procesado dinámico

Gracias por el ejemplo ocp001a!! se agradece ;)
Finalmente he conseguido mi objetivo cogiendo algún arreglo "prestado" de tu último comentario,jeje:

Código PHP:
<?php
for ($id=1$id<=448$id++){
$consulta="SELECT id, n1, n2, n3, n4, n5 FROM euromillones_min WHERE id=$id";
$resultadomysql_query ($consulta$conexion);
$datos=mysql_fetch_assoc($resultado);
  for (
$n=1$n<=50$n++){
      if(
$datos["n1"]==$n or $datos["n2"]==$n or $datos["n3"]==$n or $datos["n4"]==$n or $datos["n5"]==$n){ $b=1; }
      else{ 
$b=0; }
//$datos=mysql_fetch_array($cont);
$campo[$n]="seq_bi$n";
$fila[$n]=$b;
    }
$valores=implode(",",$fila);
$campos=implode(",",$campo);
$consulta2=mysql_query("INSERT INTO seq_bi($campos) VALUES ($valores)");
      
//$consulta2="INSERT INTO seq_bi(seq_bi".$fila["$n"].") VALUES ('$b')";
     // $resultado2=mysql_query ($consulta2, $conexion);
}
?>
Si te fijas, $campo[]="campo_res$n"; al final le he metido la variable $n para generar el índice, no se porqué, pero no me funcionaba hasta que probé asi.

El ejemplo que me has puesto no he conseguido hacerlo funcionar , y como el rendimiento en este caso era algo secundario (este script se va a utilizar a mano y en muy pocas ocasiones, ya que una vez generadas las secuencias y guardadas en la BBDD, es con estos datos con los que se va a trabajar realmente), aún así, tengo una duda sobre el ejemplo que me has puesto.

En el primer for no abres ni cierras llaves {}, igual que en el if y el else, estarían construidos con el metodo abreviado de PHP? (creo que se le llama asi).
  #8 (permalink)  
Antiguo 10/01/2012, 15:45
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Procesado dinámico

Bueno, el código que escribí no lo probé, lo hice así nada más y desde luego algo podría fallar, aunque creo que el problema es que tu necesitabas algo un poco diferente a lo que entendí en un principio.

Si no pones una llave después de un for, if while etc, el lenguaje entiende que sólo tomará en cuenta una instrucción siguiente, en otras palabras, si vas a meter dos o más instrucciones en un for debes usar llaves, de lo contrario, no es obligatorio, aunque hay gente que dice que es lo recomendable.
  #9 (permalink)  
Antiguo 10/01/2012, 16:15
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Procesado dinámico

Gracias por la aclaración y el código de ejemplo ocp001a, gracias a ti lo he resuelto, sin duda ;)

Saludos

Última edición por meisok; 10/01/2012 a las 16:16 Razón: incompleto

Etiquetas: mysql, sql, 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 14:05.