Foros del Web » Programando para Internet » PHP »

contar registros segun filtro

Estas en el tema de contar registros segun filtro en el foro de PHP en Foros del Web. Hola gente.. estoy haciendo una pagina en el que se puedan aplicar varios filtros a los listados de registros como lo hace mercadolibre. cual es ...
  #1 (permalink)  
Antiguo 25/11/2012, 19:59
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Pregunta contar registros segun filtro

Hola gente.. estoy haciendo una pagina en el que se puedan aplicar varios filtros a los listados de registros como lo hace mercadolibre.

cual es la mejor manera de hacerlo para mostrar la cantidad de registros segun opcion/filtro

ejemplo:

filtar contenido x Año:
2012 (50)
2011 (30)
2010 (60)
etc, etc

siguiendo el ejemplo, tengo que hacer un count por cada año ? pasa que hay muchos filtros, saturaria mysql. Trabajo con php.
  #2 (permalink)  
Antiguo 26/11/2012, 01:04
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: contar registros segun filtro

Buenas,

Si no quieres saturar MySQL, puedes hacer varias cosas:

- Hacer un único select, con los campos necesarios para que puedas "contar" los resultados dependiendo de los filtros

- Hacer una tabla auxiliar que se actualice cada X, en la que guardas los count de los select con filtro (y luego muestras ese número, y dices que es aprox.)

- Cargas la web y mediante AJAX vas recuperando los contadores (de este modo digamos iría "en paralelo")

Espero esto te pueda orientar un mínimo.

Yo personalmente iría por la primera o la segunda opción...

Saludos.
  #3 (permalink)  
Antiguo 26/11/2012, 15:17
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: contar registros segun filtro

si no se como se hace generalmente, por eso preguntaba si alguien tenia alguna idea de como lo hace mercadolibre.

El tema es que son 13 tipos de filtros y cada filtro tendria minimo 20 o 30 opciones (por eso use el ejemplo de los años) si hago un rango de 1950 a 2012, aca ya tengo 62 filtros diferentes, y tendria que hacer 62 count
  #4 (permalink)  
Antiguo 27/11/2012, 08:56
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: contar registros segun filtro

Cita:
Iniciado por softmaster Ver Mensaje
si no se como se hace generalmente, por eso preguntaba si alguien tenia alguna idea de como lo hace mercadolibre.

El tema es que son 13 tipos de filtros y cada filtro tendria minimo 20 o 30 opciones (por eso use el ejemplo de los años) si hago un rango de 1950 a 2012, aca ya tengo 62 filtros diferentes, y tendria que hacer 62 count
Ups... se me pasó comentar una cosa, jeje (no la suelo usar nunca)

la extensión de mysql para php (aunque ahora está obsoleta) tiene una función:

mysql_affected_rows(), creo que es. Ésta retorna el número de filas afectadas (ergo, un "count").

Solo tendrías que hacer el select y capturar el dato arrojado por mysql_affected_rows

Solo una cosa: como te dije, está obsoleto, ahora se lleva mysqli; pero creo que las funciones son iguales, solo que se le añade esa "i" (por lo que sería mysqli_affected_rows()).

Esto seguro te ayuda un poco

Saludos!
  #5 (permalink)  
Antiguo 27/11/2012, 16:32
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: contar registros segun filtro

Gracias DoHITB... pero me parece que esas opciones no me van a servir, me dan una idea, salvo esta "Hacer un único select, con los campos necesarios para que puedas "contar" los resultados dependiendo de los filtros"

pero igualmente me parece que no va a ir... quedaria una consulta interminable... pero como no tengo idea, sigo en la misma
  #6 (permalink)  
Antiguo 27/11/2012, 16:45
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: contar registros segun filtro

Por alguna razón no lo puedes hacer en una consulta con count + group by ?, algo como:

Código PHP:
Ver original
  1. SELECT YEAR(date), COUNT(*) FROM table GROUP BY YEAR(date);

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 27/11/2012, 17:41
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: contar registros segun filtro

Cita:
Iniciado por masterpuppet Ver Mensaje
Por alguna razón no lo puedes hacer en una consulta con count + group by ?, algo como:

Código PHP:
Ver original
  1. SELECT YEAR(date), COUNT(*) FROM table GROUP BY YEAR(date);

Saludos.
si lo puedo hacer el count(*), pero como no es solo el año, sino muchas opciones mas, preguntaba cual era la mejor forma de hacerlo...

si en un select intentar armar el conteo de todas las opciones, o hacer un select por cada grupo de opciones:

ejemplo:

año:
_
_
_

marca:
_
_
_

tipo:
_
_
_

etc, etc

digamos que son 13 o 15 filtros, y en cada filtro hay alrededor de 20 opciones para seleccionar.

por eso mencione los listados de mercadolibre, que tiene muchos filtros para aplicar, y en cada uno te muestra el conteo aproximado de los registros que hay
  #8 (permalink)  
Antiguo 28/11/2012, 02:14
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: contar registros segun filtro

Buenas!

Si te cuesta demasiado arreglarlas para poder hacer todo el select "de una vez", hazlo con PHP...

supongo que a nivel de consulta, actualmente harás una general (para toda la info), por lo que podrías iterar el resultado e incrementar unos contadores.

Para que te hagas una idea de lo que quiero decir:

Código PHP:
Ver original
  1. $ret = mysql_query("select anyo, ciudad, pais, item from vista_item"); /*supongamos que la vista "vista_item" tiene las relaciones necesarias para que la query sea correcta...*/
  2.  
  3. $cont = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); /*contadores: pos 0 -> año 1990 ... pos 10 -> país 1(España) ciudad1(Álava)...*/
  4.  
  5. while($row = mysql_fetch_array($ret, MYSQL_NUM)){
  6.   for($i=0;$i<10;$i++){
  7.     if($row[0] == 1990+$i){
  8.         $cont[$i]++;
  9.     }
  10.   }
  11.  
  12.   if($row[1] == 1 and $row[2] == 1){
  13.     $cont[10]++;
  14.   }
  15. }

Esto es un ejemplo que no se si se ajustará bien a lo que necesitas, pero espero te sirva para darte una idea de cómo contar los campos con PHP...

Mientras escribía esto se me ha ocurrido que puedes incluso montar una SP (Stored Procedure) en MySQL...

Saludos
  #9 (permalink)  
Antiguo 28/11/2012, 02:55
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: contar registros segun filtro

por el momento fui probando asi, arme un select general, luego dependiendo de que filtros no esten activados muestro 5 opciones de cada filtro, haciendo un select general de cada filtro (haciendo el conteo mas sencillo), para que puedan funcionar como modulos separados...

luego si quieren ver mas opciones, pongo un link "mas opciones" y hago lo mismo pero con xajax asi no recarga la pagina...

lo probe asi nomas por que no tengo muchos registros aun... pero va bien!

Gracias!! estoy leyendo lo de SP (Stored Procedure), ni sabia que existia


Código PHP:
Ver original
  1. $ret = mysql_query("select anyo, ciudad, pais, item from vista_item"); /*supongamos que la vista "vista_item" tiene las relaciones necesarias para que la query sea correcta...*/
  2. *
  3. $cont = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); /*contadores: pos 0 -> año 1990 ... pos 10 -> país 1(España) ciudad1(Álava)...*/
  4. *
  5. while($row = mysql_fetch_array($ret, MYSQL_NUM)){
  6. * for($i=0;$i<10;$i++){
  7. * * if($row[0] == 1990+$i){
  8. * * * * $cont[$i]++;
  9. * * }
  10. * }
  11. *
  12. * if($row[1] == 1 and $row[2] == 1){
  13. * * $cont[10]++;
  14. * }
  15. }

esto no lo entendi..
  #10 (permalink)  
Antiguo 28/11/2012, 03:13
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: contar registros segun filtro

el código que te he dejado era un ejemplo de cómo podrías contar los registros desde php.

Es decir, armas un select con todos los datos, y luego con un while vas comprobando las opciones del filtro para armar un array de contadores (que tendrían la cuenta de resultados arrojados)

Mira, un ejemplo más sencillo: supongamos que la tabla asistentes tiene un campo "asistir", de manera que 0 es no, 1 es quizás y 2 es si. Podrías hacer algo así:

Código PHP:
Ver original
  1. $ret = mysql_query("select nombre, asistir from asistentes");
  2. $cont = array(0,0,0);/*pos 0: no, pos 1: quizás, pos2: si*/
  3.  
  4. while($row = mysql_fetch_array($ret, MYSQL_NUM){
  5.   for($i=0;$i<3;$i++){
  6.     if($row[0] == $i){
  7.       $cont[$i]++;
  8.     }
  9.   }
  10. }

al final de este código tendrías el número de asistentes de cada tipo en el array...

Lo que decía es que podrías montar algo similar para tu select.

Si necesitas orientación sobre las SP yo sé un poco y te puedo echar un cable (mandame un MP si necesitas ayuda).

Saludos!
  #11 (permalink)  
Antiguo 28/11/2012, 14:45
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: contar registros segun filtro

Cita:
Iniciado por DoHITB Ver Mensaje
Si necesitas orientación sobre las SP yo sé un poco y te puedo echar un cable (mandame un MP si necesitas ayuda).

Saludos!

Gracias! ya lo entendi mejor... cualquier cosa te aviso... saludos!

Etiquetas: count, filtros, mysql
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 06:53.