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

Arrays dentro de un SELECT (o algo parecido)

Estas en el tema de Arrays dentro de un SELECT (o algo parecido) en el foro de Mysql en Foros del Web. Hola amigos, Como parte de un sitio web de exámenes en línea tengo tres tablas llamadas "tests", "questions" y "options", la primera contiene el examen, ...
  #1 (permalink)  
Antiguo 24/09/2009, 23:36
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 3 meses
Puntos: 0
Arrays dentro de un SELECT (o algo parecido)

Hola amigos,

Como parte de un sitio web de exámenes en línea tengo tres tablas llamadas "tests", "questions" y "options", la primera contiene el examen, la segunda las preguntas del examen y la tercera las posibles respuestas a cada pregunta.
Algo así:
Código HTML:
TESTS
idtest, bigint(10)
test, varchar(100)
description, text
... más campos ...

QUESTIONS
idquestion, bigint(10)
testid, bigint(10)
question, varchar(100)
questiontype, bigint(10)
... más campos ...

OPTIONS
idoption, bigint(10)
questionid, bigint(10)
option, varchar(100)
rightanswer, tinyint(1)
... más campos ...
Para poder armar el examen necesito una query que me de el nombre del examen, los textos de cada pregunta y los textos de las 4 posibles respuestas... ¿es posible esto en una sola query con subqueries????

En PHP yo estaría esperando algo parecido a:

Nombre Examen 1, ((Nombre Pregunta 1, (Opcion 1, Opcion 2, Opcion 3)), Nombre Pregunta 2, (Opcion 1, Opcion 2, Opcion3)), ... más preguntas ... )

Como lo tengo hecho ahora es:
- Un primer select para obtener los preguntas
- Un ciclo para recorrer la lista de preguntas.
- Por cada pregunta un nuevo select para obtener las posibles respuestas a esa pregunta.

¿Alguna sugerencia para mejorar esto y que no haya tantos selects?
Saludos,

Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #2 (permalink)  
Antiguo 25/09/2009, 01:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Arrays dentro de un SELECT (o algo parecido)

Puedes obtener toda la info en una sola query pero luego deberas tratarla con php


Código sql:
Ver original
  1. SELECT ex.examen, pr.pregunta, op.opcion
  2. FROM TESTS ex LEFT JOIN QUESTIONS pr
  3.           ON  ex.idtest=pr.testid
  4.         LEFT JOIN OPTIONS
  5.                 pr.idquestion=op.questionid
  6.         WHERE ex.examen="Examen1";

Esto nos da una tabla tipo

Examen1::Pregunta1::Opcion1
Examen1::Pregunta1::Opcion2
Examen1::Pregunta1::Opcion3
Examen1::Pregunta1::Opcion4
Examen1::Pregunta2::Opcion1
Examen1::Pregunta2::Opcion2
Examen1::Pregunta2::Opcion3
Examen1::Pregunta2::Opcion4
...
Examen1::PreguntaX::OpcionX

luego como ves deberas tratarlo con php para no repetir info....si siempre son el mismo numero de opciones sera muy facil si no se complica un poco mas....o no...

Quim

Última edición por quimfv; 25/09/2009 a las 01:43
  #3 (permalink)  
Antiguo 25/09/2009, 01:53
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 3 meses
Puntos: 0
Respuesta: Arrays dentro de un SELECT (o algo parecido)

Gracias Quim,
Inicialmente había probado algo así, pero después en PHP se me ensuciaba mucho el código pues eran tres foreach anidados... pero definitivamente es mucho más rápido que como lo estoy haciendo ahora con muchos SELECTS.
Gracias por la ayuda y lo pruebo a ver como queda.
Saludos!!!
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
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 15:03.