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

Repetir varias veces un select

Estas en el tema de Repetir varias veces un select en el foro de Mysql en Foros del Web. Buen día :) Tengo una cuestión, es posible meter dentro de un ciclo un select de mysql, para obtener varios resultados? Estoy realizando un reporte, ...
  #1 (permalink)  
Antiguo 27/08/2010, 10:00
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Exclamación Repetir varias veces un select

Buen día :)

Tengo una cuestión, es posible meter dentro de un ciclo un select de mysql, para obtener varios resultados?

Estoy realizando un reporte, más o menos así:


Como verán, necesito obtener el número de personas que eligieron determinada respuesta para x pregunta.

Más o menos había intentado esto:

Código PHP:
for ($i=1i<=num_preguntasi++)
{
   for (
$j=1j<=num_respuestasj++)
      { 
         
$pregunta=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='$j' and idrfc='$RP' and idasig='$RM' and no_preg='$i'");
   }

Ya que tanto el número de preguntas como de respuestas, será modificable, entonces debo obtener antes sl número de cada uno, para poder limitar los ciclos, aunque cuando quiero obtener el resultado almacenándolo en un array, no me regresa nada.

Para sacar el resultado de la imágen hice algo así:
Código PHP:
    //query para contar alumnos: 
    
    
$noal=@mysql_query("select count(distinct idcuenta) from evaluaciones where idrfc='$RP' and idasig='$RM' and idcarrera='$RC' and idgrupo='$RG'");
    
$num_alumnos=@mysql_fetch_array($noal);

    
//var para sacar porcentajes de respuestas:
    //Si el query es cero, divido entre 1, si no, divido entre el no. de alumnos
    
if($num_alumnos[0]==0)
        {
           
$al=1;
        }else{
            
$al=$num_alumnos[0];
        }

//query para sacar resultados pregunta no. 1

    
$preg_uno=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='1' and idrfc='$RP' and idasig='$RM' and no_preg='1'");
    
$resp_uno= @mysql_fetch_array($preg_uno);
    
$preg_unod=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='2' and idrfc='$RP' and idasig='$RM' and no_preg='1'");
    
$resp_unod= @mysql_fetch_array($preg_unod);
    
$preg_unot=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='3' and idrfc='$RP' and idasig='$RM' and no_preg='1'");
    
$resp_unot= @mysql_fetch_array($preg_unot);
    
$preg_unocu=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='4' and idrfc='$RP' and idasig='$RM' and no_preg='1'");
    
$resp_unocu= @mysql_fetch_array($preg_unocu);
    
$preg_unoci=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='5' and idrfc='$RP' and idasig='$RM' and no_preg='1'");
    
$resp_unoci= @mysql_fetch_array($preg_unoci);
.
.
.
//sacar los resultados y porcentaje:
        
$r1=$resp_uno[0];
        
$r2=$resp_unod[0];
        
$r3=$resp_unot[0];
        
$r4=$resp_unocu[0];
        
$r5=$resp_unoci[0];
        
        
$p1=($r1*100)/$al;
        
$p2=($r2*100)/$al;
        
$p3=($r3*100)/$al;
        
$p4=($r4*100)/$al;
        
$p5=($r5*100)/$al;

//comienzo a imprimir línea:
        
$fila='   '.$r1.'       '.round($p1,1).'%            '.$r2.'       '.round($p2,1).'%              '.$r3.'       '.round($p3,1).'%                '.$r4.'       '.round($p4,1).'%                 '.$r5.'       '.round($p5,1).'%';
            
$pdf->Cell(0,6,$fila,0,1,'L',10);

        
$pdf->SetX($x_axis); 
Como veran estoy haciendo el reporte con fpdf.
Además creo que esta no es la forma más prolija de hacer estas consultas, imagínen repetir esto según el número de preguntas (que hasta ahora son 24)


He investigado acerca de esto y creo que lo más conveniente sería usar un procedimiento almacenado (creo), aunque como verán soy novato en esto :P

Espero me puedan ayudar, aunque sea facilitandome algún enlace o una guía para retomarla y de ahí empezar.

Muchas gracias por su tiempo y respuestas. :)

Última edición por venom_mau; 27/08/2010 a las 10:07
  #2 (permalink)  
Antiguo 27/08/2010, 15:22
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 3 meses
Puntos: 46
Respuesta: Repetir varias veces un select

Hola.

lo que esta pasando es que en tu ciclo estas sobreescribiendo tu variable, con lo que al final solo quedas con el ultimo registro o consulta.
Código PHP:
Ver original
  1. for ($i=1; i<=num_preguntas; i++)
  2. {
  3.    for ($j=1; j<=num_respuestas; j++)
  4.       {
  5.          $pregunta=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='$j' and idrfc='$RP' and idasig='$RM' and no_preg='$i'");
  6.    }
  7. }

Prueba cambiandolo un poco
Código PHP:
Ver original
  1. for ($i=1; i<=num_preguntas; i++)
  2. {
  3.    for ($j=1; j<=num_respuestas; j++)
  4.       {
  5.          $pregunta=@mysql_query("select count(distinct idcuenta ) from evaluaciones where respuesta ='$j' and idrfc='$RP' and idasig='$RM' and no_preg='$i'");
  6.          $resultados[]=@mysql_fetch_array($pregunta); //aqui iras "acumulando" los resultados
  7.    }
  8. }

Suerte.
  #3 (permalink)  
Antiguo 31/08/2010, 08:07
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Repetir varias veces un select

Gracias por contestar lair

Fíjate que retomé tu idea e hice esto (agregando unas cosas):
Código PHP:
//Intentando query ciclado:
$resuls = array();
//Cuento preguntas:

    
$num_preg=@mysql_query("select count(idpreg) from cuest_preg");
    
$tot_pregs=@mysql_num_rows($num_preg);

//Cuento respuestas:

    
$num_res=@mysql_query("select count(idresp) from cuest_resp where idresp!='0'");
    
$tot_resp=@mysql_num_rows($num_res);

    for(
$i=1$i<=$tot_pregs$i++){
        for(
$j=1$j<=tot_resp$j++){
            
$busk = @mysql_query("select count(distinct idcuenta) from tmpcues where respuesta ='$j' and idrfc='$RP' and idasig='$RM' and idcarrera='$RC' and idgrupo='$RG' and no_preg='$i'");
            
$resuls[$i][$j] = @mysql_fetch_array($busk); 
        }
    } 
Ahora el detalle esta en que si cambio los valores de los ciclos for:
Código PHP:
    for($i=1$i<=$tot_pregs$i++){
        for(
$j=1$j<=tot_resp$j++){ 
$tot_pregs y $tot resp por 24 y 5 respectivamente (que es lo que me tenría que traer de valor los querys), si me guarda el arreglo, pero si dejo esas variables, no me hace nada.

Ya hice var_dump en esas variables, y estan nulas, lo curioso es que hago el mismo select en phpmyadmin y si me arroja los valores deseados (24 y 5).

Estará mal el query?

...

Etiquetas: repetir, select
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 03:59.