Foros del Web » Programando para Internet » PHP »

Como ordenar por cantidad de apariciones? (mysql)

Estas en el tema de Como ordenar por cantidad de apariciones? (mysql) en el foro de PHP en Foros del Web. Hola: Quisiera saber si existe alguna forma de ordenar los resultados por la cantidad de veces que aparecen.. mm no se como explicarlo, pero vamos ...
  #1 (permalink)  
Antiguo 01/07/2005, 14:35
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
Como ordenar por cantidad de apariciones? (mysql)

Hola:

Quisiera saber si existe alguna forma de ordenar los resultados por la cantidad de veces que aparecen..

mm no se como explicarlo, pero vamos al caso practico.

Tengo un foro, en una tabla se guardan los mensajes, ahora estoy haciendo unas "estadisticas" de dicho foro y quisiera nombrar a los 5 usuarios que mas postean.

En la tabla de la DB guardo el nick en cada post... pero no se como hacer para que me ordene los resultados desde el nick que aparece mas veces... la unica opcion que tengo es hacer un while y contar uno por uno los usuarios y las veces que aparecen??
__________________
I Love Programming...
  #2 (permalink)  
Antiguo 01/07/2005, 14:42
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Si no posteas el query es medio jodido de adivinar que estas haciendo, pero poe ejemplo, si haces algo como:

select count(usuario) total from tabla group by usuario

Podes ordenar por el alias:

select count(usuario) total from tabla group by usuario order by total desc limit 5
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 01/07/2005, 16:10
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
... no tienes que adivinar nada, mi duda esta planteada, no tengo el query sino obviamente no ubiese posteado la duda, no te parece? si gustamente lo que estoy pidiendo es la forma de hacer el query...

Por otra parte, no se entiende lo que dices, que es "total" ???

En mi tabla tengo los siguientes campos
id, foro, topic, autor, msg, fecha

lo que necesito es saber que nick aparece mas veces entre todos los registros comparando el campo "autor".

es decir:

linea 1 - autor = FuLaNo_
linea 2 - autor = nicolaspar
linea 3 - autor = nicolaspar
linea 4 - autor = nicolaspar

Entonces tengo que buscar alguna forma de contar (que no sea realizando una suma "normal") que nicolaspar aparece 3 veces y FuLaNo_ 1 vez....
__________________
I Love Programming...
  #4 (permalink)  
Antiguo 01/07/2005, 16:18
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Entonces sería:
select count(autor) total from tuTabla group by autor order by total desc limit 5

Fijate si te funciona, deberia traerte los 5 autores con mas registros en la tabla.

PD: total es un alias, es como hacer un count(*) as total.
PD2: Lo de adivino era por que pense, por lo que decia tu post, que ya tenias hecho alguna consulta, o que tenias una tabla...simplemente un malentendido sin inportancia.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 01/07/2005, 16:33
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
aha...

Código PHP:
<?php
$sql 
mysql_query("select autor, count(autor) total from foro_msg group by autor order by total desc limit 5");
while(
$row=mysql_fetch_array($sql)){
$_MAS_POST .= '<b>'.$row[autor].'</b> ';
}
?>
ahora entendi, el tema es que nunca habia usando GROUP y menos COUNT() :p

Y como puedo tambien saber la cantidad de veces que aparece?? supuestamente ese valor deberia tenerlo COUNT(autor) verdad? como lo utilizo, quisiera hacer algo asi:

$_MAS_POST .= '<b>'.$row[autor].'</b> ('.COUNT(autor).') ';

No se si me explico... para que aparezca FuLaNo_ (340) otro_nick (231)...

Muchisimas gracias por la ayuda :)
__________________
I Love Programming...
  #6 (permalink)  
Antiguo 01/07/2005, 16:42
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Si, de esa misma manera.
sería, algo asi:

$_MAS_POST = "";
$sql = mysql_query("select autor, count(autor) total from foro_msg group by autor order by total desc limit 5");
while($row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["autor"].'</b>'. $rs["total"].'<br>';
}
echo $_MAS_POST;


PD: No uses un vector llamando a la posicion con una constante, ya te lo aconseje en otro thread;)
PD2: No concatenes un contenido sobre algo no seteado, no es correcto (fijate que arriba puse $_MAS_POST="";).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 01/07/2005, 17:01
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
Muchas gracias nico.

Gracias por repetirme el consejo de las "" (es una mala costumbre que tengo) y la variable si la habia seteado antes, pero no lo puse para ahorrarme una linea :p

Saludos.
__________________
I Love Programming...
  #8 (permalink)  
Antiguo 01/07/2005, 18:33
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Dos UP!...
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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.
Tema Cerrado

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 19:20.