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

Consulta SQL

Estas en el tema de Consulta SQL en el foro de Bases de Datos General en Foros del Web. Esto no se si ba a aquí o si ba en otro foro, si es asi, mod mueveme a donde creeas necesario. Tengo una tabla, ...
  #1 (permalink)  
Antiguo 21/02/2010, 14:30
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Consulta SQL

Esto no se si ba a aquí o si ba en otro foro, si es asi, mod mueveme a donde creeas necesario.

Tengo una tabla, donde tengo todas las noticias de mi web, tiene varios campos, pero los que nos insteresa es que tengo noticia_id y user_id

Lo que quiero saber es los 10 usuarios que mas noticias tiene

Podria hacerlo con php recorriendo todas las noticias y ir sumando, pero creo ( y casi estoy totalmente seguro) de que lo puedo hacer con una simple consulta de sql)

A ver si alguien me puede ayudar
  #2 (permalink)  
Antiguo 21/02/2010, 15:04
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Consulta SQL

No seria mas facil en la tabla de usuarios agregar un campo que se llame "cant_noticias" e ir sumandole 1 cada vez que publique una??

No estoy 100% seguro pero la consulta deberia ser asi:

Código SQL:
Ver original
  1. SELECT MAX(COUNT(id)) FROM tabla;

Con esa conseguis el id que mas noticias tiene, con php lo metes adentro de una variable y ejecutas otra consulta asi:

Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE id = '$id';
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 21/02/2010, 15:07
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 11 meses
Puntos: 89
Respuesta: Consulta SQL

Cita:
Iniciado por jackson666 Ver Mensaje
Código SQL:
Ver original
  1. SELECT MAX(COUNT(id)) FROM tabla;
No, porque COUNT te devuelve la cantidad total de IDs que hay, osea, devuelve solo un valor
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #4 (permalink)  
Antiguo 21/02/2010, 15:08
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Consulta SQL

Cita:
Iniciado por spider_boy Ver Mensaje
No, porque COUNT te devuelve la cantidad total de IDs que hay, osea, devuelve solo un valor
Código SQL:
Ver original
  1. SELECT MAX(COUNT(DISTINCT(id))) FROM tabla;
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 21/02/2010, 18:33
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Consulta SQL

Si no es mucha molestia, podriais explicarme mejor esas consultas?

Gracias
  #6 (permalink)  
Antiguo 21/02/2010, 22:17
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Consulta SQL

Hola,

Posiblemente ...

Código SQL:
Ver original
  1. SELECT user_id, COUNT(user_id) cantidad
  2. FROM datos
  3. GROUP BY user_id
  4. ORDER BY cantidad DESC
  5. LIMIT 10

Seleccione el usuario y la cantidad por mensajes (count) agrupado por cada usuario; y ordenado por la cantidad de mensajes descendentemente pero solamente los primeros 10; por consiguiente los 10 que tienen mas mensajes.

Saludos,
  #7 (permalink)  
Antiguo 22/02/2010, 00:29
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 50
Respuesta: Consulta SQL

Yo iba a proponer algo MUY similar a lo que propone HackmanC:
Código SQL:
Ver original
  1. SELECT user_id, COUNT(noticias_id) AS cantNoticias
  2. FROM noticias
  3. GROUP BY user_id
  4. ORDER BY cantidad DESC
  5. LIMIT 10;

La única diferencia es que en el COUNT meto las noticias... de todos modos, la propuesta de HackmanC debería también andar a la perfección. ¡Suerte!
  #8 (permalink)  
Antiguo 22/02/2010, 06:35
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Consulta SQL

A ver si entendi bien la consulta.

Código SQL:
Ver original
  1. SELECT user_id, COUNT(noticias_id) AS cantNoticias

Esto selecciona las columnas user_id y cuenta todos los noticias_id y lo devuelve como el valor cantNoticias no?

Código SQL:
Ver original
  1. GROUP BY user_id

Y esto lo hace es que cuente todos los noticias_id pero agrupandolos por cada usuario no?

UN saludo y gracias
  #9 (permalink)  
Antiguo 22/02/2010, 07:16
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Consulta SQL

Pero esa consulta que te trae como resultado?

Lo que no entiendo bien es el

Código SQL:
Ver original
  1. LIMIT 10;

__________________
HV Studio
Diseño y desarrollo web
  #10 (permalink)  
Antiguo 22/02/2010, 09:35
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Consulta SQL

Por unas razones o otras aun no lo e podido probar pero supongo que devolvera algo como:
  1. user_id, cantidad_noticias
  2. user_id, cantidad_noticias
  3. user_id, cantidad_noticias
  4. user_id, cantidad_noticias
  5. user_id, cantidad_noticias
  6. user_id, cantidad_noticias
  7. user_id, cantidad_noticias
  8. user_id, cantidad_noticias
  9. user_id, cantidad_noticias
  10. user_id, cantidad_noticias

Cada fila, con un user_id distinto y su respectivas cantidades de noticias
  #11 (permalink)  
Antiguo 22/02/2010, 09:38
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Consulta SQL

Si, claro, me habia olvidado que vos necesitabas los 10 con mas noticias!
Me confundi pensando que necesitabas el que mas noticias tenia
__________________
HV Studio
Diseño y desarrollo web
  #12 (permalink)  
Antiguo 22/02/2010, 09:46
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Pregunta Respuesta: Consulta SQL

hola SoutlinK, acabo de probar este sql en mi propio bd de noticias y funciona correctamente:


Código:
SELECT
usu.ide_usu, usu.usu_usu, count(usu.ide_usu) as 'cantidad'
FROM
noticia noti, usuario usu
where noti.ide_usu=usu.ide_usu
group by usu.ide_usu, usu.usu_usu
order by 'cantidad' desc
limit 10
lo muestra en este formato:

Código HTML:
ide_usu 	usu_usu 	cantidad
1 	administrador 	222
3 	jcastro 	163
...
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #13 (permalink)  
Antiguo 22/02/2010, 09:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Tema movido desde PHP a Bases de Datos
  #14 (permalink)  
Antiguo 22/02/2010, 17:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Consulta SQL

Soutlink,
¿qué quieres que salga si hay 11 usuarios que tienen las 10 primeras cantidades, es decir, que dos de ellos tengan la misma cantidad y sean el décimo y el undécimo?
Si quieres los 11 usuarios, en ese caso, tendrás que usar otra consulta. Dinos qué quieres.
  #15 (permalink)  
Antiguo 23/02/2010, 08:16
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Consulta SQL

En verdad ya esta resuelto. Lo que queria era que me mostrara a los 10 usuarios con mas noticias. En caso de empate en verdad me taba igual cual mostrara.

Por mi se puede cerrar si quereis

Etiquetas: sql
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 14:35.