Foros del Web » Programando para Internet » PHP »

paginas más y menos visitadas y contarlas

Estas en el tema de paginas más y menos visitadas y contarlas en el foro de PHP en Foros del Web. Estoy haciendo un contador de visitas y me gustaría saber cómo se hace para contar los registros de un campo sin que cuente los repetidos, ...
  #1 (permalink)  
Antiguo 28/02/2005, 02:35
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
paginas más y menos visitadas y contarlas

Estoy haciendo un contador de visitas y me gustaría saber cómo se hace para contar los registros de un campo sin que cuente los repetidos, es decir en un campo hay: registro1, registro2, registro3, registro1, registro2, como veis en total hay 5 registros pero el 1 y el 2 estan repetidos con lo que en realidad solo hay 3 registros, yo quisiera:
1º que me cuente solo los que no estan repetidos, en este caso serían 3
2º hacer una consulta y poder mostrar solo los que no están repetidos
3º cual es el que más se repite
4º cual es el que menos se repite

Sabeis de algún sitio donde pueda encontrar información al respecto, por aquí en el foro de momento no encontré nada que me sirviera y usando la función count o mysql_num_rows solo sé mostrar el total de los registros de un campo, no sé hacer combinaciones con el, a ver si me podeis hechar una mano, como siempre muchas gracias de antemano.
  #2 (permalink)  
Antiguo 28/02/2005, 02:55
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
Puedes usar el DISTINCT en la consulta! entonces solo te contara los registros diferentes!
Select DISTINCT count(campo) as aliascampo from tabla...
  #3 (permalink)  
Antiguo 28/02/2005, 03:01
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Según los vas leyendo los apilas en una matriz y la compruebas para cada registro:

matriz registro;

leo elregistro -> compruebo si está en registro
¿está?
- si: incremento el valor de registro[elregistro]
- no: añado a registros elregistro y le doy el valor=1

¿Eso te vale?
Si necesitas código dilo.
dobeto
  #4 (permalink)  
Antiguo 28/02/2005, 03:03
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Lo primero muchísimas gracias por vuestra ayuda, la verdad es que si pones algo de código lo entenderé mejor, no llevo mucho en esto de php y no tengo las ideas muy claras todavía en algunas cosas, gracias
  #5 (permalink)  
Antiguo 28/02/2005, 03:12
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Saludos mom. ¿Cómo vamos?
Cita:
Iniciado por mon
(...) Sabeis de algún sitio donde pueda encontrar información al respecto, por aquí en el foro de momento no encontré nada que me sirviera (...)
- respecto a lo del sitio, repito: www.mysql-hispano.org
- respecto a lo de la busqueda del foro... que raro. En una busqueda rápida que hice encontre esto ... solo un ejemplo, claro... solo dí click al primer post que me "latió"
....
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 28/02/2005, 03:22
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
........... gracias ..........
  #7 (permalink)  
Antiguo 28/02/2005, 03:23
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
No lo he probado y lo he escrito así de paso, puede que tenga algún error

Código PHP:
//matriz para guardar los registros
$registros= array();

$datos= @mysql_query('SELECT * FROM ...',$idConex);
while(
$fila=musql_fetch_array($datos))
{
 
reset $registros;
 
$existefalse;
 
//leo el registro y compruebo si está en la matriz
 
for($i=0,$max=sizeof($registros);$i<$max;$i++)
 {
  
//si lo encuentra incremento el valor
  
if($registro[$i]==$fila['elregistro']) $registro[$i]++;
  
$existetrue;
  
//no paro el bucle, pero podría hacerlo
 
}
 
 
//si no ha encontrado 'elregistro' lo añado a la pila
 
if(!$existe
  {
   
array_push($registros,$fila['elregistro']);
   
$registros['elregistro']=1;
  } 
dobeto

}
  #8 (permalink)  
Antiguo 28/02/2005, 03:25
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Perdón, se me ha quedao fuera el paréntesis que cierra el while
  #9 (permalink)  
Antiguo 28/02/2005, 03:30
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
q codigo te interesa?
  #10 (permalink)  
Antiguo 28/02/2005, 03:30
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Perdona dobeto pero no entiendo que se hace con este código osea para que vale? porque no lo entiendo, haciendo esto que obtengo?, que sería para contarlos sin contar los repetidos?, gracias
  #11 (permalink)  
Antiguo 28/02/2005, 03:39
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Gracias sergi climent, de momento prefiero pelearme yo con los códigos para entender y aprender lo que estoy haciendo, en principio estoy con lo de contar los registros que no estén repetidos, luego ya veremos con el código de saber cual es el que más se repite y el que menos se repite, cuando eso ya lanzaré otro S.O.S, muchas gracias
  #12 (permalink)  
Antiguo 28/02/2005, 03:39
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
te aconsejo q lo hagas todo con simples consultas.
Para contar todos los registros pero q no se han repetidos:Es decir si en tu tabla tienes:reg1,reg2,reg3,reg4,reg5,reg1,reg2,reg3,reg 4,reg5 lo q te devolvera la consulta es 5.

Código PHP:
$sql="Select DISTINCT count(campo) as cuentacampo from tabla" 
Es eso lo q querias?
  #13 (permalink)  
Antiguo 28/02/2005, 03:40
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Pues tendrias una matriz 'registros' con los registros registrados y las veces que ha sido visto cada uno.

Al finalizar el recuento tendrías algo así:
$registros['sito1']= 2
$registros['sito2']= 1
$registros['sito3']= 8
Eso en principio, luego podrías hacerlo más completo.
  #14 (permalink)  
Antiguo 28/02/2005, 03:48
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Si eso es, es con lo que estoy ahora, con lo que me habías dicho al principio, estaría bien puesto esto
Código PHP:
$sql19"SELECT  DISTINCT count(ip)  FROM visitas "
$es19 mysql_query($sql19) or die("Error al leer base de datos: ".mysql_error);

while(
$usuarios=mysql_fetch_array($es19)) 

echo 
"USUARIO:".$usuarios['ip'];


Última edición por mon; 28/02/2005 a las 03:51
  #15 (permalink)  
Antiguo 28/02/2005, 03:53
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
utiliza los alias cuando hagas una consulta q contega un count, es decir...

Código PHP:
$sql19"SELECT DISTINCT count(ip) as ip FROM visitas"
$es19 mysql_query($sql19) or die("Error al leer base de datos: ".mysql_error); 

while(
$usuarios=mysql_fetch_array($es19

echo 
"USUARIO:".$usuarios["ip"]; 

  #16 (permalink)  
Antiguo 28/02/2005, 04:01
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Gracias sergi climent y jam1138, no me daba ningún resultado y era por no poner el alias, gracias, ahora voy a ver cómo hacer para que me muestre el que más se repite, en una consulta y en otra consulta el que menos se repite, venga muchas gracias
  #17 (permalink)  
Antiguo 28/02/2005, 04:28
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
para el max:
Código PHP:
$sql19"SELECT DISTINCT campo,count(ip) as ip FROM visitas GROUP BY ip ORDER BY ip DESC LIMIT 0,1"
para el min:
Código PHP:
$sql19"SELECT DISTINCT campo,count(ip) as ip FROM visitas GROUP BY ip ORDER BY ip ASC LIMIT 0,1"
  #18 (permalink)  
Antiguo 28/02/2005, 04:44
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Ummmm, no entiendo, así no estaría contando los registros que hay en un campo de manera que no se repitan y ordenandolos y agrupandolos limitandolos a 1, te lo digo porque el resultado que me arroja no se corresponde con ninguna opción, mira lo puse así
Código PHP:
$sql20="SELECT  DISTINCT modulo, COUNT(modulo) as modulo FROM visitas GROUP BY ip ORDER BY modulo DESC LIMIT 0,1";
$es20 mysql_query($sql20) or die("Error al leer base de datos: ".mysql_error);

while(
$paginaplus=mysql_fetch_array($es20) )

$paginamas=$paginaplus['modulo'];
echo 
"PAGINA MÁS VISTA:".$paginaplus['modulo']."<br>";

Lo que necesito es que me mire cual es la que más se repite y me lo diga, si la que mas se repite se llama home pues que me de el nombre, tengo en modulo un total de 17 registros de los cuales uno de ellos se repite 12 veces, otro 2 veces, otro 2 veces y otra más 1 vez, entonces me debería devolver el nombre de la que tiene 12 repeticiones, haciendo lo que tú me dices me arroja un valor de 3, ojo poniendolo como lo puse, que no sé si estará bien, gracias
  #19 (permalink)  
Antiguo 28/02/2005, 04:47
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
Perdona, se me fue un poco... quita el DISTINCT!
y despues en tu consulta tienes el group by ip y estas haciendo seleccion de modulos no?
  #20 (permalink)  
Antiguo 28/02/2005, 04:52
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
para el max quedaria asi:
Código PHP:
$sql20="SELECT modulo,COUNT(modulo) as cuentamodulo FROM visitas GROUP BY modulo ORDER BY cuentamodulo DESC LIMIT 0,1"
$es20 mysql_query($sql20) or die("Error al leer base de datos: ".mysql_error); 

while(
$paginaplus=mysql_fetch_array($es20) ) 

$paginamas=$paginaplus['modulo']; 
echo 
"PAGINA MÁS VISTA:".$paginaplus['modulo']."<br>"

lo qhago en la cosnulta es seleccionar y contar todos los modulos agrupandolos x nombre de modulos y ordenandolos de mayor a menor asi el primer registro es el mas grande y limito el resultado a q me muestre un unico registro, q en este caso sera el mas grande!
  #21 (permalink)  
Antiguo 28/02/2005, 04:59
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
Eso había hecho, quitarle el DISTINCT, pero me daba error ponía
Código PHP:
$sql20="SELECT  DISTINCT modulo, COUNT(modulo) as modulo FROM visitas GROUP BY modulo ORDER BY modulo DESC LIMIT 0,1"
$es20 mysql_query($sql20) or die("Error al leer base de datos: ".mysql_error); 

while(
$paginaplus=mysql_fetch_array($es20) ) 

$paginamas=$paginaplus['modulo']; 
echo 
"PAGINA MÁS VISTA:".$paginaplus['modulo']."<br>"

No sé que era, supongo que sería por el alias, poniendo lo que tú me das ahora si da el resultado, muchas gracias
  #22 (permalink)  
Antiguo 28/02/2005, 05:02
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
En el caso del min tienes q ordenar la consulta de menor a mayor asi el primer resultado sera el mas pequeño.
  #23 (permalink)  
Antiguo 28/02/2005, 05:06
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
ya, ya, ya está funcionando todo, muchísimas gracias amigo
  #24 (permalink)  
Antiguo 28/02/2005, 05:42
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
....
Solo una observación... y si no te importa mejor , pero ¿qué pasa cuando hay un más de una página con el titulo de "la más/menos visitada"??

... También no sé si sea necesaria tanta consulta a la BD. Podrías gastar menos recursos haciendo una sola... quizá ayudandote de las funciones MAX y MIN de MySQL... ... ahora que también podrías hacer un if comparando cada "modulo", si es mayor sustiruirlo.. etc... igual manejar un array para el caso de haya más de una página con el mismo número (mayor/menor) de visitas...
...

Solo se me ocurrió , favor de ignorarlo si no es de importancia.

En serio: ¿cómo vamos?
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 17:34.