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

Problema con la Union de Consultas

Estas en el tema de Problema con la Union de Consultas en el foro de Mysql en Foros del Web. Hola a todos, tengo un problemilla. Tengo una web con base de datos en MySql. Tengo dos tablas para guardar los datos de los tests ...
  #1 (permalink)  
Antiguo 22/07/2011, 12:14
 
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 5 meses
Puntos: 0
Problema con la Union de Consultas

Hola a todos, tengo un problemilla.

Tengo una web con base de datos en MySql. Tengo dos tablas para guardar los datos de los tests que realiza los usuarios en la web. Una contiene los tests realizados de un tipo, en concreto los que he bautizado como "tests del profesor" y la otra los llamados "tests aleatorios". En cada una de ellas se gurada el usuario que realiza el test, los errores, aciertos, puntuación, etc.. así como la fecha de realizacion.

Bien, lo que quiero hacer es una sección donde el usuario puede ver todos los tests que lleva hechos, sean del tipo que sean, ordenados por su fecha de realización. Para ello realizo una unión de consultas tal que así:

Código SQL:
Ver original
  1. SELECT fecha_test_aleatorio, id_test_aleatorio, aciertos_aleatorio
  2. FROM tests_aleatorios_hechos
  3. WHERE usuario_hace_test_aleatorio='$id_usuario'
  4. UNION
  5. SELECT fecha_test_profesor, id_test_profesor_hecho, aciertos_test_profesor
  6. FROM tests_profesor_hechos
  7. WHERE usuario_hace_test_profesor='$id_usuario'
  8. ORDER BY 1"

Luego al hacer el siguiente código php sobre la consulta anterior:

Código PHP:
while($fila=mysql_fetch_array($respuesta))
    {
        foreach(
$fila as $campo=>$valor)
        {
            echo 
$campo.": ".$valor."    -    ";
        }
        echo 
"<BR>";
    } 
Me sale lo siguiente:


0: 2011-07-20 17:50:02 - fecha_test_aleatorio: 2011-07-20 17:50:02 - 0: 73 - id_test_aleatorio: 73 - 1: 8 - aciertos_aleatorio: 8 -
0: 2011-07-20 18:16:45 - fecha_test_aleatorio: 2011-07-20 18:16:45 - 0: 74 - id_test_aleatorio: 74 - 1: 6 - aciertos_aleatorio: 6 -
0: 2011-07-20 18:19:26 - fecha_test_aleatorio: 2011-07-20 18:19:26 - 0: 75 - id_test_aleatorio: 75 - 1: 0 - aciertos_aleatorio: 0 -
0: 2011-07-20 18:40:14 - fecha_test_aleatorio: 2011-07-20 18:40:14 - 0: 76 - id_test_aleatorio: 76 - 1: 1 - aciertos_aleatorio: 1 -


Cuando lo que debería salir, o al menos lo que yo quiero que salga es:

fecha_test_aleatorio: 2011-07-20 17:50:02 - id_test_aleatorio: 73 - aciertos_aleatorio: 8 -
fecha_test_aleatorio: 2011-07-20 18:16:45 - id_test_aleatorio: 74 - aciertos_aleatorio: 6 -
fecha_test_profesor: 2011-07-20 18:19:26 - id_test_profesor_hecho: 75 - aciertos_test_profesor: 0 -
fecha_test_aleatorio: 2011-07-20 18:40:14 - id_test_aleatorio: 76 - aciertos_aleatorio: 1 -


Es decir, yo lo que quiero es que me coja los tests que ha realizado un usuario de ambas tablas, y las muestre ordenadas por su fecha, pero me devuelve filas donde salen las columnas duplicadas una con nombre numérico y la otra con el nombre siempre de la primera de las consultas de la union.

¿Qué estoy haciendo mal?

Gracias de antemano
  #2 (permalink)  
Antiguo 25/07/2011, 05:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 4 meses
Puntos: 574
Respuesta: Problema con la Union de Consultas

Código MySQL:
Ver original
  1. SELECT sbc.Fecha,sbc.Test,sbc.tipo,sbc.Aciertos
  2. (SELECT fecha_test_aleatorio as Fecha, id_test_aleatorio as Test, "P" as tipo, aciertos_aleatorio as Aciertos
  3. FROM tests_aleatorios_hechos
  4. WHERE usuario_hace_test_aleatorio='$id_usuario'
  5. SELECT fecha_test_profesor as Fecha, id_test_profesor_hecho as Test, "A" as tipo aciertos_test_profesor as Aciertos
  6. FROM tests_profesor_hechos
  7. WHERE usuario_hace_test_profesor='$id_usuario') as sbc
  8. ORDER BY sbc.Fecha,sbc.Tipo;



Código PHP:
Ver original
  1. while($fila=mysql_fetch_array($respuesta))
  2.     {
  3.         for($f=0;$f<count($fila);$f++)
  4.         {
  5.             echo $fila[$f]["Fecha"]." ".
  6.                      $fila[$f]["Test"]." ".
  7.                      $fila[$f]["tipo"]." ".
  8.                      $fila[$f]["Aciertos"]."<br />";
  9.         }
  10.     }

A ver si te sirve....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/07/2011, 08:39
 
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problema con la Union de Consultas

Gracias quimfv, pero tampoco funciona como yo quiero. Voy a hacerlo finalmente sacando ambos conjuntos de registros por separado, metiéndolos en un array cada uno, y luego unificándolos y ordenándolos con php, ya que no doy con la solución.
  #4 (permalink)  
Antiguo 25/07/2011, 08:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 7 meses
Puntos: 2658
Respuesta: Problema con la Union de Consultas

No le veo sentido que hagas consultas separadas, porque la consulta en sí debe estar devolviendo correctamente los datos. El problema parece más relacionado con la forma de presentar los datos en pantalla, es decir con el PHP que con el MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, select, sql, tabla, union
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 21:24.