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

no logro mostrar una consulta sin repetir registros

Estas en el tema de no logro mostrar una consulta sin repetir registros en el foro de SQL Server en Foros del Web. saludos, tengo dos tablas con la siguiente informacion cada una: tabla: evaluacion evaluacionId evaluacionPregunta tematicasId 22 cuanto es 2+2 3 23 cuanto es 3+9 3 ...
  #1 (permalink)  
Antiguo 04/07/2015, 11:10
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 11 meses
Puntos: 0
no logro mostrar una consulta sin repetir registros

saludos, tengo dos tablas con la siguiente informacion cada una:


tabla: evaluacion

evaluacionId evaluacionPregunta tematicasId
22 cuanto es 2+2 3
23 cuanto es 3+9 3
24 cuanto es 1+6 3


tabla: respuestas

respuestaId evaluacionId respuesta
30 22 4
31 22 6
32 22 5
33 23 6
34 23 12
35 23 8
36 24 6
37 24 8
38 24 7

como ven es un modelo simple para hacer hacer preguntas con tres posibles respuestas.

ahora al tratar de listar cada pregunta con sus respectivas opciones de respuestas no logro hacer, empiezo por lo principal que es listar las 3 preguntas pero al hacerlo me repite 3 veces la misma pregunta:

Código MySQL:
Ver original
  1. SELECT evaluacion.evaluacionPregunta, evaluacion.evaluacionId,  respuestas.respuesta
  2. FROM respuestas inner join evaluacion on respuestas.evaluacionId=evaluacion.evaluacionId
  3. WHERE tematicasId = colname

este es el codigo en php:
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

agradezco que me ayuden a solucionar este problema.

Última edición por gnzsoloyo; 06/07/2015 a las 07:09
  #2 (permalink)  
Antiguo 04/07/2015, 11:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: no logro mostrar una consulta sin repetir registros

Claro que con ese query te va a repetir 3 veces la misma pregunta, porque estas haciendo un inner join con la tabla de respuestas, la tabla de respuestas tiene 3 valores validos para la tabla preguntas, por lo que te va a generar 1 resultado por cada pregunta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/07/2015, 07:03
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: no logro mostrar una consulta sin repetir registros

pero entonces cual seria la solución? cambiar el orden del INNER JOIN??

porque lo he hecho así:

Código MySQL:
Ver original
  1. SELECT evaluacion.evaluacionPregunta, evaluacion.evaluacionId,  respuestas.respuesta
  2. FROM evaluacion inner join respuestas on evaluacion.evaluacionId=respuestas.evaluacionId
  3. WHERE evaluacionId = colname

pero me tira el siguiente error:

Column 'evaluacionId' in where clause is ambiguous
  #4 (permalink)  
Antiguo 06/07/2015, 07:14
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, 4 meses
Puntos: 2658
Respuesta: no logro mostrar una consulta sin repetir registros

El tema me parece es que lo que debes entender que una cosa es obtener las opciones de respuestas que has creado, a obtener la respuesta a la pregutna. Son dos cosas diferentes.
Además, no es lo mismo la tabla de datos que obtienes de una consulta, que la tabla que debes mostrar en pantalla.
Lo que te devuelve la query original es correcto, tres veces la pregunta, una por cada opcion de respuesta. Lo que TU DEBES HACER es mostrar sólo una vez la pregutna, y cada una de las opciones de respuesta.
Pero eso es un problema de visualización y no de la consulta. Es en programación donde debes resolver ese tema. La base te devolverá los datos como se los consultes (y están bien, insisto), lo que hagas con ellos no es tema de la base de datos.

Lo que sí yo no veo es cómo sabes cuál de las tres opciones es la correcta... ¿tienes una tabla o un atributo en la tabla de respuesta que lo diga?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/07/2015, 07:22
 
Fecha de Ingreso: mayo-2015
Mensajes: 53
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: no logro mostrar una consulta sin repetir registros

me falto ponerlo, en la tabla respuestas hay una columna adicional llamada respuestaValor, aquí se asigna un 1 par ala respuesta correcta, y las incorrectas dan 0, mi idea es que al momento de hacer la consulta en cuestión el estudiante pueda visualizar la pregunta y las respuestas, luego por medio de un check box seleccione la correcta y asi enviar un uno a un nuevo campo que creare en la tabla llamada respuestaEstudiante, luego simplemente comparar ambas columnas y listo.

Volviendo al tema de la consulta, quedo varado en ese punto entonces, la pagina la estoy programando en php y mis conocimientos son básicos (todo lo aprendí de Internet), pero igual según el comentario de gnzsoloyo tendría que ver la forma de que no me muestre las respuestas tres veces por cada una, ademas creo que el mismo error se me va a presentar cuando muestre las respuestas.
  #6 (permalink)  
Antiguo 06/07/2015, 07: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, 4 meses
Puntos: 2658
Respuesta: no logro mostrar una consulta sin repetir registros

Como ya te dije, el como MUESTRES el resultado de la consulta, es tema de programación, no de bases de datos, y si te tomas el tiempo de leer las reglas del foro de Bases de datos verás que aqui no tratamos las soluciones de programación, solo las de SQL y BBDD, donde no está tu problema.

Pregunta en el foro de PHP. Alli te pueden ayudar con esa parte.
Por otro lado, en ese foro yo respondí hace un par de semanas una pregunta que planteaba el mismo tipo de dilema, y les puse una posible solución mas o menos sencilla. Buscala. Te puede orientar.


En cuanto a ese error "Column 'evaluacionId' in where clause is ambiguous", es un error de manual... En el WHERE no estás indicando la tabla de donde debe tomar ese campo... Y en ambas tablas existe un campo con el mismo nombre.

Código SQL:
Ver original
  1. SELECT E.evaluacionPregunta, E.evaluacionId,  R.respuesta
  2. FROM evaluacion E INNER JOIN respuestas R ON E.evaluacionId = R.evaluacionId
  3. WHERE evaluacionId = colname /* OK. Pero de qué tabla?*/

Otra cosa: Acostumbrate a usar alias. Hace mas legibles los códigos.
__________________
¿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, registros, repetir, select, tabla
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 02:26.