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

WHERE mal hecho?

Estas en el tema de WHERE mal hecho? en el foro de Mysql en Foros del Web. Buenas! Estoy haciendo una web y una parte de ella es, como en la mayoria, las noticias. Tengo una tabla donde se muestran las 10 ...
  #1 (permalink)  
Antiguo 13/05/2009, 13:59
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Exclamación WHERE mal hecho?

Buenas!

Estoy haciendo una web y una parte de ella es, como en la mayoria, las noticias.

Tengo una tabla donde se muestran las 10 ultimas noticias creadas. En esa misma sale el titulo, categoria, autor, fecha, cantidad de comentarios y las visitas (o clicks) a esa noticia.

Tengo la consulta hecha y funciona bien...funciona bien porque esta bien hecho pero no muestra lo que quiero que muestre. Me explico.

Código sql:
Ver original
  1. SELECT base_desarrollo.id, base_desarrollo.project_id, base_desarrollo.fecha, base_desarrollo.titulo, base_desarrollo.autor, base_proyectos.proyecto, base_proyectos.url, IFNULL(COUNT(base_comentarios.des_id),0) total
  2. FROM base_desarrollo
  3. LEFT JOIN base_proyectos ON base_desarrollo.project_id = base_proyectos.id
  4. INNER JOIN base_comentarios ON base_comentarios.des_id = base_desarrollo.id
  5. GROUP BY  base_desarrollo.id
  6. ORDER BY base_desarrollo.fecha DESC LIMIT 10;

Esa es la consulta que estoy utilizando. En ella indico que la categoria (proyectos) sea la indicada a la noticia (desarrollo) y que salga la cantidad de comentarios que hay en cada noticia.

El problema es que de alguna forma, esta consulta esta haciendo que solo se muestren las noticias que tienen comentarios. Las que no tienen comentarios no se muestran y entonces no tiene sentido, si no se ven no se puede dejar comentario XD Llevo toda la tarde mirandola, haciendo cosas, modificandola un poco pero nada.

Ya de paso, me gustaria preguntar para que sirve exactamente el "GROUP BY" y a poder ser no me mandeis a otra pagina a leer un manual, si podeis explicarmelo os lo agradecere, si no, no pasa nada.

Espero que puedan ayudarme y Gracias de antemano ^^
  #2 (permalink)  
Antiguo 13/05/2009, 17:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 15 años
Puntos: 1
Respuesta: WHERE mal hecho?

Hola Vendetta como estas... me parece que el problema lo tenes en la utilizacion de los JOIN...
para ser exacto me parece que el tema esta en esta linea...

"INNER JOIN base_comentarios ON base_comentarios.des_id = base_desarrollo.id "

Al usar inner join le estas indicando al SQL que a ambos lados del igual deben existir datos... o sea tienen que exisitr registros en la tabla base_comentarios con algun id y tambien en base_desarrollo y ambos id deben ser iguales, si no encuentra un match entonces no trae registros...

Para ello puedes usar LEFT JOIN a cambio de Inner join, cuando le informas eso al SQL entonces solo basta con que se cumpla un solo lado de la igualdad, o sea basta con que exista en una sola de las tablas...

Tambien puedes utilizar Right Join, puedes profundizar con algun manual entre Left y Right (join)...

Tu consulta podria quedar algo asi


Código:
      SELECT base_desarrollo.id, base_desarrollo.project_id, base_desarrollo.fecha, base_desarrollo.titulo, base_desarrollo.autor, base_proyectos.proyecto, base_proyectos.url, IFNULL(COUNT(base_comentarios.des_id),0) total
        FROM base_desarrollo
       LEFT JOIN base_proyectos ON base_desarrollo.project_id = base_proyectos.id
       LEFT JOIN base_comentarios ON base_comentarios.des_id = base_desarrollo.id
       GROUP BY  base_desarrollo.id
       ORDER BY base_desarrollo.fecha DESC LIMIT 10;
Respecto de Group te cuento un poco por arriba como para darte una idea...

Hay consultas que trabajan con funciones como la que utilizas vos COUNT (que cuenta registros) pero tambien puede ser sum, max, min, etc...

Al trabajar con estas funciones debes indicarle al Sql cuales son los campos de corte deGrupo (por decirlo de alguna manera) ejemplo base_desarrollo

Usamos la funcion COUNT y queremos saber cuantos registros tenemos por autor

select count(base_desarrollo.id) as cantidad , base_desarrollo.autor from base_desarrollo
group by base_desarrollo.autor

pero si cambias el group podrias contar por otra cosa proba tambien esta mira

select count(base_desarrollo.id) as cantidad , base_desarrollo.fecha from base_desarrollo
group by base_desarrollo.fecha

Simplemente cambiando autor por fecha tenes la cantidad por fecha..

Espero que te sirva ...

Saludos
  #3 (permalink)  
Antiguo 13/05/2009, 18:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: WHERE mal hecho?

Muchisimas gracias por la respuesta, me a ayudado mucho y ya me funciona :P

Gracias ^^
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 05:15.