Foros del Web » Programando para Internet » PHP »

Generar listado (array?) para consulta...

Estas en el tema de Generar listado (array?) para consulta... en el foro de PHP en Foros del Web. En fin, creo que es dificil un título descriptivo para lo que necesito e intentaré ser lo más claro posible: He hecho una consulta a ...
  #1 (permalink)  
Antiguo 26/07/2010, 07:00
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Generar listado (array?) para consulta...

En fin, creo que es dificil un título descriptivo para lo que necesito e intentaré ser lo más claro posible:

He hecho una consulta a la BD de MySQL en la que puedo ver listado un valor Este valor se agrupa por una especie de identificador común y devuelve una suma:

Código PHP:
$cons "SELECT id_comun, SUM(total) FROM tabla1 WHERE GROUP BY id_comun";
$resultado mysql_query($cons) or die (mysql_error());

    while (
$row_cons mysql_fetch_array($resultadoMYSQL_NUM)) {
                
        
$var1 $row_cons[0]; 
        
$var2 $row_cons[1]; 
Si imprimo un 'echo' de $var1 y $var2, obtendré un listado agrupado de id_comunes con la suma respectiva del campo 'total' de la tabla1.

Me explico con un ejemplo:

Cita:
Este es el estado de la base de datos:
=============
id_comun | total |
=============
5 | 10 |
5 | 20 |
1 | 35 |
8 | 19 |
8 | 13 |
=============

Y este es el resultado de la consulta de arriba generado para el ejemplo:

=============
id_comun | total |
=============
5 | 30 |
1 | 35 |
8 | 32 |
=============
Hasta aquí todo marcha correctamente. Sin embargo, más abajo del código que os he citado tengo otra consulta a otra tabla de la base de datos en la que debería utilizar el valor de 'id_comun' y el de 'total'.

Así, sabiendo que $var1 tiene los valores 5,1,8 y $var2 los valores 30,35 38 respectivamente, cómo le puedo decir a la siguiente consulta que busque por cada valor?:

Código PHP:
$sql2 "SELECT * FROM table2 WHERE id = $var1 AND total >= $var2;";
/... 
resto de la consulta 
He intentado más o menos lo descrito en la segunda consulta pero siempre me imprime el último valor de la cadena y no cada uno por separado.

Gracias por vuestra ayuda.
__________________
Andrew :P
  #2 (permalink)  
Antiguo 26/07/2010, 07:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Generar listado (array?) para consulta...

Lo que pasa es en el while solo estas declarando una vez la variable, al salir del while, esta va a contener solamente el último valor, puedes hacer dos cosas, una es guardar los resultados en un array y posteriormente ciclar ese array, o optimizar eso y mejor generar la segunda consulta dentro del primer while y ahí hacer tus calculos.

Saludos.
  #3 (permalink)  
Antiguo 26/07/2010, 07:32
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Generar listado (array?) para consulta...

Gracias GatorV... Si mis asistencias a clases de 'array' me funcionan... entonces estaré en lo cierto que el array lo puedo guardar de la siguiente manera?:

Código PHP:
$cons "SELECT id_comun, SUM(total) FROM tabla1 WHERE GROUP BY id_comun";
$resultado mysql_query($cons) or die (mysql_error());

    while (
$row_cons mysql_fetch_array($resultadoMYSQL_NUM)) {
                
        
$var1[] = $row_cons[0]; 
        
$var2[] = $row_cons[1]; 
Además, cierro el while al final del script... Sin embargo esto me sigue dando sólo el último resultado ...

La segunda consulta la estoy haciendo justo después de la generación de los array...

Cómo puedo, pues listar ese $var2[] en la segunda consulta?
__________________
Andrew :P
  #4 (permalink)  
Antiguo 26/07/2010, 07:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Generar listado (array?) para consulta...

Si lo estas haciendo dentro de tu while, solo entonces usa la misma variable $var2 dentro de tu script.
  #5 (permalink)  
Antiguo 26/07/2010, 09:09
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Generar listado (array?) para consulta...

Gracias GatorV... Igualmente si incluyo la variable sola como $var2 me muestra solamente la última.

Cómo puedo listar todas las variables fuera del while secundario para que el dicho segundo scrip haga la consulta por cada una de ellas?... Acaso debo llamarlo de la siguiente manera:

Código PHP:
$var2[]=$row_cons[1]

$var_total array_filter($var2);
$var_total2 array_sum($var2);

foreach (
$var2 as $key => $variable) {

$variable_listada =var2[$key] {



A decir verdad, estoy basatante confundido con el tema de las array.
__________________
Andrew :P
  #6 (permalink)  
Antiguo 26/07/2010, 09:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Generar listado (array?) para consulta...

No entiendo lo que quieres hacer pero realmente algo tan sencillo te serviria así:
Código PHP:
Ver original
  1. $cons = "SELECT id_comun, SUM(total) FROM tabla1 WHERE GROUP BY id_comun";
  2. $resultado = mysql_query($cons) or die (mysql_error());
  3.  
  4.     while ($row_cons = mysql_fetch_array($resultado, MYSQL_NUM)) {
  5.         list($idComun, $Suma) = $row;
  6.         $sql2 = "SELECT * FROM table2 WHERE id = $idComun AND total >= $Suma";
  7.         echo $sql2;
  8.      }

Eso te debería de mostrar las consultas bien, solo es agregarle tu código para hacer la consulta y ya esta.

Saludos.
  #7 (permalink)  
Antiguo 26/07/2010, 10:56
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Generar listado (array?) para consulta...

Hola GatorV :)

Cita:
Iniciado por GatorV Ver Mensaje
Código PHP:
Ver original
  1. while ($row_cons = mysql_fetch_array($resultado, MYSQL_NUM)) {
  2.         list($idComun, $Suma) = $row;
  3.         $sql2 = "SELECT * FROM table2 WHERE id = $idComun AND total >= $Suma";
  4.         echo $sql2;
  5.      }
Creo que acá:

Código PHP:
Ver original
  1. list($idComun, $Suma) = $row;

es $row_cons.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 29/07/2010, 07:56
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Generar listado (array?) para consulta...

Muchas gracias a vosotros por la ayuda en este tema que a decir verdad me trae de cabeza.

En fin, basado en la información que me dáis, lo que he podido hacer para listar las variables es lo siguiente (Intento explicarlo desde cero):

Código PHP:
// Genero la consulta para listar los valores sumados
$cons "SELECT id_comun, SUM(total) FROM tabla1 WHERE GROUP BY id_comun";
$resultado mysql_query($cons) or die (mysql_error());

    while (
$row_cons mysql_fetch_array($resultadoMYSQL_NUM)) {

     
$array = array($row_cons[1]);

    foreach (
$array as $var) {

// Y se imprime un listado de valores sumados y agrupados por id_comun que
// en mi ejemplo es: 30, 35 y 32

     
echo $var;  
}

Ahora bien, la idea es que en el siguiente script, la consulta ($sql2) tome esos valores por separado y realice una consulta por cada valor en la sentencia '>=':

Código PHP:
$sql2 "SELECT * FROM table2 WHERE total >= $var;";
//(...) y el resto de la sintaxis
   
while ..... 
El 'echo' de la consulta me imprime solamente el valor del ultimo resultado del array y no tres que debería mostrar. Así, si imprimo el un echo '$sql2', me arroja el siguiente resultado:

Código PHP:
$sql2 "SELECT * FROM table2 WHERE total >= 32;"
Cuando por cada valor me tendría que imprimir:

Código PHP:
$sql2 "SELECT * FROM table2 WHERE total >= 30;";
$sql2 "SELECT * FROM table2 WHERE total >= 35;";
$sql2 "SELECT * FROM table2 WHERE total >= 32;"
Pues bien, la pregunta es... Cómo puedo hacer que la consulta '$sql2' me arroje el resultado que os muestro arriba para cada uno de los valores listados por el aaray en la primera consulta?

Gracias por vuestra ayuda.
__________________
Andrew :P
  #9 (permalink)  
Antiguo 29/07/2010, 09:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Generar listado (array?) para consulta...

No es necesario que hagas eso, si usas el ejemplo que te di, con eso puedes crear tus querys.

Saludos.
  #10 (permalink)  
Antiguo 02/08/2010, 07:01
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Generar listado (array?) para consulta...

Si, es como lo has mostrado inicialmente. Gracias por la ayuda!...

Saludos!

POST RESUELTO
__________________
Andrew :P

Etiquetas: listado
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 11:51.