Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ADO
 Foro
 Foro Bloqueado  Tema Bloqueado


Autor Temas
tonigm
Starting Member


19 Posts
Mensajes - 11 Jul 2002 :  13:26:19  Ver Perfil  Enviar Email
Estoy haciendo un foro en asp y tengo un problema a la hora de mostrar el listado de preguntas,donde tambien sale el numero de respuestas que tiene cada pregunta.
utilizo el siguiente sql:

SELECT preguntas.pregunta, preguntas.fecha, preguntas.autor, Count(preguntas.pregunta) AS total
FROM preguntas LEFT JOIN respuestas ON preguntas.numero = respuestas.num
GROUP BY preguntas.pregunta, preguntas.fecha, preguntas.autor, preguntas.moderado, respuestas.moderado
HAVING preguntas.moderado="si" AND respuestas.moderado="si"

Me lo hace bien excepto que si todas las respuestas de una pregunta estan en "no" no me sale la pregunta. Que tengo de modificar del sql para que me salga la pregunta aunque no tenga respuestas o las respuestas sean "no"?

nicolas
New Member

España
74 Posts
Posted - 12 Jul 2002 :  12:56:40  Ver perfil  Enviar e-mail
Aunque no estoy muy seguro, me parece que te pasa lo siguiente:

1) Haces una 'left join', con lo cual obtienes todas las filas de la tabla 'preguntas' combinadas con todas las 'respuestas' relacionadas

2) Ahora bien: Para las preguntas sin respuesta, la fila resultante de la combinación se completa con 'nulos' para los campos de la respuesta.

3) Despues agrupas por varios campos de 'pregunta' y por 'respuestas.moderado', que recuerda vale nulo en las 'preguntas' sin 'respuesta'

4) HAVING es una restricción sobre el resultado de la agrupación; en tu 'having', filtras por 'respuestas.moderado="si", por lo que nunca te aparecerán las preguntas sin respuesta, que siguiendo el razonamiento anterior, están a nulo.

Soluciones:

Aunque es un poco rara, este tipo de consulta funciona en Access y SQL Server. Técnicamente es una consulta 'sincronizada' montada en una consulta de la 'select' principal.

SELECT preguntas.pregunta, preguntas.fecha, preguntas.autor, (select count(*) from respuestas where preguntas.numero=respuestas.num) AS Numero
FROM preguntas

... Si quieres añadirle la condición de que moderado="si" (que por lo que veo guardas en preguntas y respuestas), sería:

SELECT preguntas.pregunta, preguntas.fecha, preguntas.autor, (select count(*) from respuestas where preguntas.numero=respuestas.num AND respuestas.moderado="si") AS Numero
FROM preguntas
WHERE preguntas.moderado="si"

Pues nada, ya diras si te rula

Nicolás Sánchez Ruiz
ESI BarcelonaInicio Pagina

   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar