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

Ayuda con SELECT

Estas en el tema de Ayuda con SELECT en el foro de Mysql en Foros del Web. Tengo 2 tablas, Ejercicio y Respuesta . En Ejercicio almaceno el id_ejercicio, el título y el ejercicio y en la tabla Respuesta alamceno el id_respuesta, ...
  #1 (permalink)  
Antiguo 01/05/2009, 12:24
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
Ayuda con SELECT

Tengo 2 tablas, Ejercicio y Respuesta. En Ejercicio almaceno el id_ejercicio, el título y el ejercicio y en la tabla Respuesta alamceno el id_respuesta, el id_ejercicio, la respuesta.

Ahora bien, quiero hacer una consulta sql donde me muestre todos los títulos con la cantidad de respuestas que tiene cada ejercicio, algo parecido a esto:

Títulos ------------------------------------------ Respuestas
Titulo 1--------------------------------------------------- 5
Título 2-------------------------------------------------- 4
Titulo 3-------------------------------------------------- 10


Para mi debo, pero no se si es posible, poner en la consulta, que me muestre todos los registros del campo titulo y que en dependencia por la relación entre ambas tablas, haga un count u otra expresión que me permita contar las respuestas de cada uno de los diferentes títulos.
  #2 (permalink)  
Antiguo 01/05/2009, 12:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

Prueba con:

Código mysql:
Ver original
  1. select e.titulos,count(*) num_respuesta from ejercicio e
  2. respuesta r on e.id_ejercicio=r.id_ejercicio group by titulos;

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/05/2009, 08:46
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
Y si quisiera obtener además el titulo, pues además de la cantidad de visitas y lecturas también me interesa el titulo, y si no el ejercicio no tiene lecturas o respuesta este no se me visualiza en la consulta.

Hueso52, parecida a la solución que mes das ya había implementado una, pero la tuya no está de más, ahora el problema está en que si el ejercicio no tiene respuestas ni visita, entonces no se me visualiza el su título, como puedo hacer para este caso.

Última edición por GatorV; 03/05/2009 a las 17:44
  #4 (permalink)  
Antiguo 03/05/2009, 08:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

Cambia el inner join por left join.
Pruebalo y nos cuentas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 03/05/2009, 09:02
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
De acuerdo Respuesta: Ayuda con SELECT

Hueso52, ahora si me visualiza el ejrcicio aunque no tenga respuestas y en caso de que tenga respuestas, me visualiza el ejercicio y me dice además la cantidad de respuestas que tiene.

Por último, quiro agregar otra tabla a esa consulta, que en este caso almacena las lecturas, como hago esto.
  #6 (permalink)  
Antiguo 03/05/2009, 09:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

que campos tiene la nueva tabla? con que tabla de las actuales está relacionada?
que consulta resultante requieres?

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 03/05/2009, 09:15
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Ayuda con SELECT

La tabla lecturas lo que hace es almacenar las visitas que hacen los usuarios cuando solo dan clic en el título y tiene como campos:

ip ------------------------ varchar(12)
fecha ------------------- date
hora -------------------- time
id_ejercicio ----------- char(3)

y se relaciona con la tabla ejercicios.

Y lo que quiero que me de es en la misma consulta anterior de las respuestas, añadir la tabla lecturas para que también salgan junto a las respuestas, la cantidad de lecturas que ha tenido un ejercicio.

Espero haberme explicado bien para me puedas entender y ayudar.

Espero, gracias.
  #8 (permalink)  
Antiguo 03/05/2009, 09:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

otra cosa.... cambia un poco la consulta que te dí:

Código mysql:
Ver original
  1. SELECT e.titulos,count(r.id_ejercicio) num_respuesta FROM ejercicio e
  2. respuesta r on e.id_ejercicio=r.id_ejercicio GROUP BY titulos;

De esta forma, te muestra cero, cuando no hay respuestas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 03/05/2009, 09:21
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Ayuda con SELECT

Si gracias, ya había arreglado eso, pero ahora nesecito mostrar también las lecturas.
  #10 (permalink)  
Antiguo 03/05/2009, 09:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

Esto te puede servir.

Código mysql:
Ver original
  1. SELECT e.titulos,count(r.id_e) num_respuestas, ifnull(t1.visitas,0) visitas FROM ejercicio e
  2. respuestas r on e.id=r.id_e
  3. (select id_e,count(*) visitas from lecturas group by id_e)t1
  4. on e.id = t1.id_e  GROUP BY titulo;

Nos cuentas como te fue.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 03/05/2009, 09:44
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
De acuerdo Respuesta: Ayuda con SELECT

Excelente resultado, ahora si he podido lograr lo que deseaba, gracias.

Por último, me gustaría si no es mucho pedir, que me explicaras esta consulta paso a paso, pues nunca había trabajado con los LEFT JOIN, ni con ifnull, ni tampoco sabía hacer select compuestos.
  #12 (permalink)  
Antiguo 03/05/2009, 09:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

Claro boy-computer

El Left join es una sentencia que te muestra los datos relacionados entre dos o mas tablas.
A diferencia del inner join, si existen registros en la tabla que declaras a la izquierda (en este caso ejercicio) también te los muestra independiente si existe o no en la segunda tabla (en este caso respuestas).

ifnull es una función que comprueba si el campo es null y pone visualmente lo que tu quieras observar. Para este caso, el pone null al contar lecturas que nisiquiera han sido registradas, por eso no devuelve un cero sino un null. Con esta sentencia le decimos que cuando no encuentre nada, ponga un cero en el valor de la consulta.

ojala me haya explicado bien.

Te comparto este link para que amplies información
http://mysql.conclase.net/curso/index.php?sen=JOIN

un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 03/05/2009, 10:09
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Ayuda con SELECT

Gracias nuevamente colega, por haberme dedicado tiempo, y por la explicación tan detallada que me has brindado.

Espero que podamos contactar de vez en cuando.

Nos vemos.
  #14 (permalink)  
Antiguo 03/05/2009, 10:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con SELECT

De nada boy-computer.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #15 (permalink)  
Antiguo 03/05/2009, 10:52
Avatar de boy-computer  
Fecha de Ingreso: diciembre-2006
Ubicación: Cuba, Pinar del Río
Mensajes: 337
Antigüedad: 17 años, 4 meses
Puntos: 1
Exclamación

Huesos52, se me olvidaba, si quisiera ponerle una condición a la consulta, donde solo me muestre los datos de los ejercicios que pertenecen a una determinada habilidad (cuya tabla tengo con el nombre unidades) y sus campos son:

id_unidad ---------- int(2)
unidad -------------- varchar(100)
id_habilidad ------- char(2)

Es decir, que me muetre los titulos y sus visitas y lecturas del id_habiliad="1"
Como me quedaría la consulta.

A esta última pregunta ya le he dado solución

Última edición por GatorV; 03/05/2009 a las 17:45
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:25.