Foros del Web » Programando para Internet » PHP »

Obtener de una BD MySQL los 10 valores que más se repiten

Estas en el tema de Obtener de una BD MySQL los 10 valores que más se repiten en el foro de PHP en Foros del Web. Estoy tratando de hacer una aplicación que muestre los 10 registros que más se repitan en mi BD, es decir, algo asi como un Top ...
  #1 (permalink)  
Antiguo 25/05/2009, 00:33
 
Fecha de Ingreso: mayo-2009
Mensajes: 37
Antigüedad: 14 años, 10 meses
Puntos: 0
Obtener de una BD MySQL los 10 valores que más se repiten

Estoy tratando de hacer una aplicación que muestre los 10 registros que más se repitan en mi BD, es decir, algo asi como un Top 10, en este caso tengo una BD en la que almaceno logs, lo que quiero sacar de ella son las 10 direcciones IP que mas se repiten, pero no se como hacerlo con PHP, por favor ayuda...
  #2 (permalink)  
Antiguo 25/05/2009, 00:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

eso lo puedes hacer con mysql solo pon este codigo en el query y vas a ver

SELECT COUNT( * ) AS `Filas` , `IP`
FROM `table_log`
GROUP BY `IP `
ORDER BY `IP` DESC
LIMIT 0 , 10


Luego en PHP llama las columnas IP y Filas

Me dejas saber
  #3 (permalink)  
Antiguo 25/05/2009, 00:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 37
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Disculpa la molestia de nuevo, pero llamar como? :s
  #4 (permalink)  
Antiguo 25/05/2009, 00:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Seguro es facil asi

Código PHP:
$sql "SELECT COUNT( * ) AS `Filas` , `IP` 
FROM `table_log` 
GROUP BY `IP ` 
ORDER BY `IP` DESC 
LIMIT 0 , 10"
;
$r mysql_query($sql) or die(mysql_error());

echo 
"Top ten IP";
while(
$row mysql_fetch_assoc($r)){
  echo 
$row["IP"] . " = " $row["Filas"]."<br />";

Perdona que no fuera especifico anteriormente.
  #5 (permalink)  
Antiguo 25/05/2009, 00:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 37
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Ya lo probé y me ignora algunos valores, me muestra valores que tienen menos repeticiones que otros que no aparecen :s, tienes idea de por que?
  #6 (permalink)  
Antiguo 25/05/2009, 01:02
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

select nombre,cantidad from productos order by cantidad desc limit 0,10; Un ejemplo sencillo de lo que quieres
  #7 (permalink)  
Antiguo 25/05/2009, 01:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 37
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Ingrese a la BD unos datos de prueba, resalto lo de prueba por que puse direcciones invalidas.

Cita:
100.000.000.000
100.000.000.000
100.000.000.000
100.000.000.000
100.000.000.000
100.000.000.000
100.000.000.000
100.000.000.000
100.000.000.10
100.000.000.11
100.000.000.111
100.000.000.111
100.000.000.111
100.000.000.12
100.000.000.13
100.000.000.222
100.000.000.222
100.000.000.333
100.000.000.333
100.000.000.333
100.000.000.333
100.000.000.444
100.000.000.444
100.000.000.444
100.000.000.444
100.000.000.444
100.000.000.555
100.000.000.555
100.000.000.555
100.000.000.666
100.000.000.666
100.000.000.666
100.000.000.777
100.000.000.777
100.000.000.888
100.000.000.888
100.000.000.888
100.000.000.999
100.000.000.999
100.000.000.999
100.000.000.999
100.000.000.999
Y me muestar que estos son los 10 que más se repiten segun la consulta:

SELECT COUNT( * ) AS `Filas` , `valor` FROM `logsf`GROUP BY `valor` ORDER BY `valor` DESC LIMIT 0 , 10;

Cita:
Filas | valor
-------+----------------
5 | 100.000.000.999
3 | 100.000.000.888
2 | 100.000.000.777
3 | 100.000.000.666
3 | 100.000.000.555
5 | 100.000.000.444
4 | 100.000.000.333
2 | 100.000.000.222
1 | 100.000.000.13
1 | 100.000.000.12
  #8 (permalink)  
Antiguo 25/05/2009, 01:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Dame la información de los campos que estas usando y dame un ejemplo de los valores que viste que no mostró

si estas usando phpMyAdmin dale un export y envia la información de los campos para ver como estan creados y algun valor que hayas visto.

Se supone que lo unico que estas haciendo es comparaciones con el GROUP BY y eso lo que hace es comparar y todo lo que sea igual lo agrupa, se supone que no te de error

Me dejas saber
  #9 (permalink)  
Antiguo 25/05/2009, 01:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Ok vi el error no debes poner ORDER BY valor, sino ORDER BY Filas DESC

Disculpa que no te habia escrito bien el codigo anteriormente
  #10 (permalink)  
Antiguo 25/05/2009, 01:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 37
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Perfecto, ya me mostro los datos correctos, muchas gracias por tu ayuda... XD
  #11 (permalink)  
Antiguo 25/05/2009, 01:09
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

O algo como esto


mysql> select producto,count(producto) as cantidad from detallefactura group by
(producto) order by(cantidad) desc limit 0,10;
+----------+----------+
| producto | cantidad |
+----------+----------+
| AC010 | 5 |
| AD015 | 3 |
| AD016 | 3 |
| OT023 | 2 |
| AC002 | 2 |
| AC008 | 2 |
| AC009 | 2 |
| AC011 | 2 |
| AD011 | 2 |
| AD014 | 1 |
+----------+----------+
10 rows in set (0.00 sec)

mysql>
  #12 (permalink)  
Antiguo 25/05/2009, 01:17
 
Fecha de Ingreso: mayo-2009
Mensajes: 37
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Obtener de una BD MySQL los 10 valores que más se repiten

Ok muchas gracias acoevil...
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 16:06.