Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como imprimir datos de dos tablas distintas segun orden dado

Estas en el tema de Como imprimir datos de dos tablas distintas segun orden dado en el foro de PHP en Foros del Web. No se si esta demás decir que con tablas me refiero a tablas de BASE DE DATOS ! Iré al grano. Estoy haciendo una aplicacion ...
  #1 (permalink)  
Antiguo 05/07/2013, 13:12
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Como imprimir datos de dos tablas distintas segun orden dado

No se si esta demás decir que con tablas me refiero a tablas de BASE DE DATOS !
Iré al grano. Estoy haciendo una aplicacion para imprimir preguntas y respuestas de una determinada prueba y curso.

Logré imprimir las preguntas y respuestas de una determinada prueba y curso, mediante las siguientes sintaxis:


Código PHP:
<?
                  $r
=0;
                             
$consulta "SELECT f.id_preguntas, f.descrip_resp, f.letra_resp, f.correctas
                           FROM pruebas a
                           INNER JOIN preguntas b ON a.id_pruebas = b.id_pruebas
                           INNER JOIN asignaturas c ON a.id_asignaturas = c.id_asignaturas
                           INNER JOIN niveles d ON b.id_niveles = d.id_niveles
                           INNER JOIN habilidad e ON b.id_habil = e.id_habil
                           INNER JOIN respuestas f ON b.id_preguntas = f.id_preguntas
                           WHERE a.id_curso = '"
.$_POST['id_curso']."' and b.id_pruebas='".$_POST['pruebas_r']."'";
                        
$result $mysqli->query($consulta);
                       
                
$consulta2 "SELECT a.id_pruebas, b.descrip_preg, d.descrip_nivel, e.nombre_habil, b.id_preguntas
                         FROM pruebas a
                         INNER JOIN preguntas b ON a.id_pruebas = b.id_pruebas
                         INNER JOIN niveles d ON b.id_niveles = d.id_niveles
                         INNER JOIN habilidad e ON b.id_habil = e.id_habil
                         WHERE a.id_curso = '"
.$_POST['id_curso']."' and b.id_pruebas='".$_POST['pruebas_r']."'";
                        
$result2 $mysqli->query($consulta2);
                       
                  
?>
Y con un ciclo While imprimo las preguntas y con otro While las respuestas. PERO, me imprime por separado las preguntas y respuestas, por una cosa obvia del siguiente codigo que emplee..
Código PHP:
            <p>
                     <?    while ($row2 $result2->fetch_array()){
              
                   
                            echo 
"".($r=$r+1).") ".$row2['descrip_preg']."<br /><br />"?>
                          
      
                         <? ?>   </p>
                        
                         <p>
                         <?   while ( $row $result->fetch_array() ) {
                   
                        echo 
'<input type="radio" name="alternativa'.$row['id_preguntas'].'" value="'.$row['letra_resp'].'">'.$row['descrip_resp']."<br />";?>
                       <? ?>
                        </p>
Ahora mi gran duda.. como hago para imprimir de forma ordenada las preguntas y respuestas.
Es decir,
Pregunta 1
  • Alternativa 1
  • Alternativa 2
  • Alternativa 3
  • Alternativa 4
  • Alternativa 5
Pregunta 2
  • Alternativa 1
  • Alternativa 2
  • Alternativa 3
  • Alternativa 4
  • Alternativa 5
etc....
Estoy bloqueado JAJAJ . Si me ayudan a descifrar esto estaria dando un paso gigantesco.
De antemano muchas gracias

Última edición por CHAEEZ; 05/07/2013 a las 13:26
  #2 (permalink)  
Antiguo 05/07/2013, 13:28
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

si es sistema de preguntas-respuiestas por que lo tenes en tablas separadas??

deberia unificar todo en una sola tabla y agregar un campo TIPO que indique si pregunta (valor 0, indica que es el padre) y si es respuesta (valor: id del padre)

asi podes armar armar un arbol infinito de preguntas y respuestas
  #3 (permalink)  
Antiguo 05/07/2013, 13:42
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Hola Patriarka, gracias por responder.. Si tienes razon, pero el proyecto esta bastante avanzado en este momento y hacer un cambio en esas tablas influiria mucho.. ¿¿Hay alguna forma de realizar lo que pido como esta?? Yo se que estoy cerca.. estoy imprimiendo las preguntas y respuestas que yo quiero pero no de la manera que quiero. Debe ser algun ciclo, foreach anidado o no se.. La verdad es que foreach no tengo muy claro como funciona en php.
  #4 (permalink)  
Antiguo 05/07/2013, 14:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

No necesariamente esta mal tener preguntas y respuestas por aparte, ya que son entidades diferentes, las preguntas no son respuestas, ni las respuestas preguntas.

El diseño que tiene es correcto, el problema es a la hora de impresión y es que vas a tener que anidar los ciclos while, en un ciclo recorres las preguntas y por cada pregunta tienes que hacer una consulta para obtener las respuestas de esa pregunta en concreto.

Saludos.
  #5 (permalink)  
Antiguo 05/07/2013, 15:18
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

tengo esto

Código PHP:
    <?    while ($row2 $result2->fetch_array()){?><p>
    <?echo "<strong>".($r=$r+1).". ".$row2['descrip_preg']."</strong> <br><br>";?>
    <? while($row=$result->fetch_array()){ ?>
    <? echo "<input name=".$row['id_preguntas']." value=".$row['letra_resp']." type='radio'> ".$row['descrip_resp']."<br>"?> 
    <? ?>   
    </p><? ?>
pero el resultado es el mismo :/. No me resulta nada de lo que quiero hacer .
  #6 (permalink)  
Antiguo 05/07/2013, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Por que es lo que te digo, tienes que ejecutar la segunda consulta en base al ID de la pregunta para que entonces vengan en el órden y solo listes las de la consulta inicial.
  #7 (permalink)  
Antiguo 05/07/2013, 16:14
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

y eso como lo hago ? Necesito que me guien .. No tengo idea como hacerlo =/. ¿Como discrimino las respuestas por pregunta, segun las sintaxis que tengo.? algun ejemplo de como hacerlo me seria de ayuda.
  #8 (permalink)  
Antiguo 05/07/2013, 17:27
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Esto me muestra solo una fila de respuestas.

Código PHP:
<?    while ($row2 $result2->fetch_array()){?><p>
    <?echo "<strong>".($r=$r+1).". ".$row2['descrip_preg']."</strong> <br><br>";?>
    <? while($row=$result->fetch_array()){ ?>
    <? if($row2['id_preguntas']==$row['id_preguntas']){ ?>
    <? echo "<input name=".$row['id_preguntas']." value=".$row['letra_resp']." type='radio'> ".$row['descrip_resp']."<br>"?> 
    <? } }?>   
      <hr class="arr_aba"></p><? ?>
  #9 (permalink)  
Antiguo 05/07/2013, 18:08
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Hola,

Podrías utilizar solamente una consulta, normalmente es preferible traer todos los datos necesarios de una sola vez y después usar los métodos de agrupación.

Por ejemplo, podrías utilizar una sola consulta, como pareciera que lo hubieras planificado originalmente, debe devolver todos los campos y estar ordenados por preguntas y respuestas desde la base de datos,

Código:
		$consulta = "SELECT a.id_pruebas, b.descrip_preg, d.descrip_nivel, e.nombre_habil, b.id_preguntas
					f.id_preguntas, f.descrip_resp, f.letra_resp, f.correctas
                           FROM pruebas a
                           INNER JOIN preguntas b ON a.id_pruebas = b.id_pruebas
                           INNER JOIN asignaturas c ON a.id_asignaturas = c.id_asignaturas
                           INNER JOIN niveles d ON b.id_niveles = d.id_niveles
                           INNER JOIN habilidad e ON b.id_habil = e.id_habil
                           INNER JOIN respuestas f ON b.id_preguntas = f.id_preguntas
                           WHERE a.id_curso = '".$_POST['id_curso']."' and b.id_pruebas='".$_POST['pruebas_r']."'".
						   "ORDER BY a.id_pruebas ASC, f.letra_resp ASC";
                        $result = $mysqli->query($consulta);
Después solamente imprimes la pregunta cuando cambie,

Código PHP:
     $last_id_pruebas = -1;
     while ($row = result->fetch_array()) {
        if ($last_id_pruebas !== $row['id_pruebas']) {
            <?echo "<strong>".($r=$r+1).". ".$row['descrip_preg']."</strong> <br><br>";?>
            $last_id_pruebas = $row['id_pruebas'];
        }
        <? echo "<input name=".$row['id_preguntas']." value=".$row['letra_resp']." type='radio'> ".$row['descrip_resp']."<br>"?> 
     }
Saludos,
  #10 (permalink)  
Antiguo 05/07/2013, 18:29
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

coloque ese codigo pero me muestra solamente una pregunta y todas las respuestas hacia abajo
  #11 (permalink)  
Antiguo 05/07/2013, 19:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Como te digo tienes que ejecutar la otra consulta dentro del while, te dejo el código a grandes rasgos:

Código PHP:
Ver original
  1. $query = "SELECT ... WHERE id_pregunta=?";
  2. $respuestas = $link->prepare($query);
  3. $respuestas->bind_param('s', $idPregunta);
  4. $respuestas->bind_result($var1, $var2, $varX);
  5.  
  6. while($row = $result->fetch_assoc()) {
  7.         // imprimes tu $row
  8.  
  9.         // segundo query
  10.         $idPregunta = $row['id_pregunta'];
  11.         $respuestas->execute();
  12.  
  13.         while($respuestas->fetch()) {
  14.                      // Imprimes las respuestas...
  15.         }
  16. }

Saludos.
  #12 (permalink)  
Antiguo 05/07/2013, 19:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

HackmanC, creo que en vez de $last_id_pruebas = $row['id_pruebas']; debería ser $last_id_pruebas = $row['id_preguntas'];
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 05/07/2013, 20:44
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

- de donde tomo el valor de la id de la pregunta GatorV?
- Gracias Triby, probaré de esa manera.
  #14 (permalink)  
Antiguo 05/07/2013, 21:21
 
Fecha de Ingreso: julio-2013
Ubicación: Temuco
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Cita:
Iniciado por GatorV Ver Mensaje
Como te digo tienes que ejecutar la otra consulta dentro del while, te dejo el código a grandes rasgos:

Código PHP:
Ver original
  1. $query = "SELECT ... WHERE id_pregunta=?";
  2. $respuestas = $link->prepare($query);
  3. $respuestas->bind_param('s', $idPregunta);
  4. $respuestas->bind_result($var1, $var2, $varX);
  5.  
  6. while($row = $result->fetch_assoc()) {
  7.         // imprimes tu $row
  8.  
  9.         // segundo query
  10.         $idPregunta = $row['id_pregunta'];
  11.         $respuestas->execute();
  12.  
  13.         while($respuestas->fetch()) {
  14.                      // Imprimes las respuestas...
  15.         }
  16. }

Saludos.
MUCHAS GRACIAS GatorV, me resulto de mucha ayuda!! Problema resuelto.
Esta fue la clave. al preguntarme de donde capturo el valor de idPregunta me respondi solo. dentro del WHILE donde imprimo las preguntas coloco la sintaxis que me consultara las respuestas segun una id_pregunta.
  #15 (permalink)  
Antiguo 05/07/2013, 22:16
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Como imprimir datos de dos tablas distintas segun orden dado

Hola,

Cita:
Iniciado por Triby Ver Mensaje
HackmanC, creo que en vez de $last_id_pruebas = $row['id_pruebas']; debería ser $last_id_pruebas = $row['id_preguntas'];
Tienes razón, es decir, yo no lo probé e inclusive seguramente tenía errores sintácticos. El hecho es que funciona, pero es un algoritmo, ese tipo de algoritmos rara vez me los 'catchan'. Aunque estos algoritmos son mas eficientes al hacer una sola consulta por todas las preguntas y respuestas, al contrario de hacer una consulta por cada pregunta.

Saludos,

Etiquetas: diseño, examen, formulario, mysql, php+bd+mysql
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 01:43.