PHP-Hispano.net Comunidad hispana de desarrollo web

Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?

17 usuarios Online (0)

Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Generar estadísticas a partir de una tabla

Generar estadísticas a partir de una tabla

10 respuestas 679 visitas Categoría PHP

Generar estadísticas a partir de una tabla

Avatar de ainvar
* * * * * * *

(Nivel 1 - 22 posts)

#0 Offline ainvar Usuario 24 ene 10
Hola, tengo un problema con una aplicación en PHP que estoy haciendo. Dicha aplicación recibe una serie de consultas que se guardan en una tabla (Mysql), los campos de la tabla son los siguientes:

idCliente -> int
palabraClave ->varchar
fecha -> date
hora -> time
respuesta >> txt

Bien lo que necesito es a partir de estos datos sacar una estadística de las consultas hechas por día y cliente (mostrarlas en una tabla HTML) y generar un gráfico de líneas, en la que los ejes sean X la fecha e Y el número de consultas y cada línea del gráfico represente un cliente. he mirado algunas clases para generar el gráfico pero no he sido capaz de hacerlo con ninguna, si me podeis echar una mano, pues eso, que me alegrariais el día.

Gracias

Re: Generar estadísticas a partir de una tabla

Avatar de Irozga
* * * * * * *

(Nivel 4 - 499 posts)

#1 Offline Irozga Usuario 25 ene 10
¿Y tienes algo hecho hasta el momento? ¿Qué parte es la que no sabes hacer, los cálculos o dibujar la gráfica? Si es la gráfica igual esto te sirve http://blog.unijimpe.net/jpgraph-graficos-con-php/ o http://php.net/manual/en/book.image.php

Las dudas por foro, no por memo

Re: Generar estadísticas a partir de una tabla

Avatar de ainvar
* * * * * * *

(Nivel 1 - 22 posts)

#2 Offline ainvar Usuario 25 ene 10
Hola irozga, gracias por contestar, te explico lo que tengo hecho, en primer lugar hago un select a la tabla asi:

$query_rsInmSms = "SELECT GROUP_CONCAT(idCliente ORDER BY idCliente) Codigos, fechaRecepcion FROM mensajes GROUP BY idCliente, fechaRecepcion ORDER BY fechaRecepcion";

Después el código php ha sufrido muchos cambios, pero tengo más o menos esto:
<?php
do{
$codigos = explode(',',$row_rsInmSms['Codigos']);
echo '<br />Fecha: '.$row_rsInmSms['fechaRecepcion'];
foreach($codigos as $cliente){
echo '<br />Fecha: '.$row_rsInmSms['fechaRecepcion'];
$codigosC = count($codigos);
echo $codigosC.'<br />';
echo '<br />Total: '.$codigosC.'<br /><br />';
}
}while($row_rsInmSms = mysql_fetch_assoc($rsInmSms));
?>

Esto me da una salida confusa en el caso de que en el mismo día haya más de un cliente consultado (lo normal, vamos).

Por otro lado, para la gráfica tengo una clase bastante sencilla de usar, para la cual tengo que generar unos arrays (elemx y elemy), que son bi dimensionales, de modo que deberían quedar así:

$elemx[0][] = "2005-01-01";
$elemx[0][] = "2005-01-02";
$elemx[0][] = "2005-01-03";
$elemx[0][] = "2005-01-04";

$elemy[0][] = 87;
$elemy[0][] = 8;
$elemy[0][] = 83;
$elemy[0][] = 94;

$elemy[1][] = 5;
$elemy[1][] = 7;
$elemy[1][] = 3;
$elemy[1][] = 59;

$elemy[$i][] = 48;
$elemy$i][] = 49;
$elemy[$i][] = 29;
.....
.....

Las fechas no tienen ningún problema, pues aunque podría ir una para cada serie de elementos Y, no es necesario y además hace que el gráfico quede peor, pues se mezclan las fechas en la X. Mi problema, aparte del anterior, es que no se generar el $i del elemx[$i][].

No se si me he explicado bien, espero que lo entiendas y me heches una mano.

Gracias

Asunto

Avatar de Nemox
* * * * * * *

(Nivel 1 - 30 posts)

#3 Offline Nemox Usuario 25 ene 10
yo no he entendido nada, empezando por lo de "recibe una serie de consultas".

Sí, ocho años después, tenemos firma :D

Re: Generar estadísticas a partir de una tabla

Avatar de ainvar
* * * * * * *

(Nivel 1 - 22 posts)

#4 Offline ainvar Usuario 25 ene 10
Hola Nemox, vamos a ver, la aplicación consiste en una base de datos que guarda datos sobre unos elementos, cada uno de los cuales tiene un código o palabra clave, mediante un sms con ese código (las consultas), enviado a un número determinado se hace una consulta a la DB y este es respondido por el sistema con una información. Lo que que guardo entonces es el id del cliente, el código del elemento, la fecha y la hora y el texto del mensaje. Sobre estos datos es sobre los que quiero generar las estadísticas.

un saludo

Re: Generar estadísticas a partir de una tabla

Avatar de Nemox
* * * * * * *

(Nivel 1 - 30 posts)

#5 Offline Nemox Usuario 25 ene 10
Todo depende del tipo de estadísticas que quieras construir: no es lo mismo hacer un histograma que una recta de regresión.
Los problemas los tienes haciendo los cálculos matemáticos, generando gráficas o dónde?
Si sólo quieres mostrar datos acumulados lo que se me ocurre así a priori es que conozcas un poco mejor lo que te puede ofrecer propia base de datos: en un buen manual de SQL encontrarás explicaciones detalladas sobre las posibilidades de la consulta SELECT: GROUP BY, ORDER BY, HAVING, etc...

'Simply SQL', de Rudy Limeback para mi es uno de mis libros imprescindibles.

Sí, ocho años después, tenemos firma :D

Re: Generar estadísticas a partir de una tabla

Avatar de Nemox
* * * * * * *

(Nivel 1 - 30 posts)

#6 Offline Nemox Usuario 25 ene 10
Me falta la otra mitad del mensaje!

Te iba a decir también que para pintar gráficas tienes muchas posibilidades. Yo trabajo desde hace algunos meses con pChart, tiene muchísimas posibilidades y la documentación es buena. Al principio cuesta un poco pero la mecánica siempre es la misma, lo más difícil es calcular las series de datos que queremos mostrar (aquí es donde te ayuda conocer bien SQL, lo que te decía antes).

Saludos!

Sí, ocho años después, tenemos firma :D

Re: Generar estadísticas a partir de una tabla

Avatar de ainvar
* * * * * * *

(Nivel 1 - 22 posts)

#7 Offline ainvar Usuario 25 ene 10
Hola Nemox, gracias por la respuesta, lo que quiero conseguir es sacar estadísticas de administración, que serían basicamente el nº de consultas por cliente y día, que codigo es el más consultado cada día y poco más.

Luego estarían las estadísticas del cliente en si, que sería basicamente lo mismo pero sobre un solo idCliente.

Precisamente lo que no sé hacer es la consulta, como verás más arriba he estado jugando con GROUP_CONCAT y GROUP BY, y el select de arriba es lo qie más se acerca a lo que quiero. En cuanto a la gráfica en si, la clase que tengo me llega y me sobra, sólo pretendo hacer un simple gráfico de líneas, en la que cada una represente a un cliente y tenga las fechas en la X y el nº de consultas en la Y, es decir algo similar a lo siguiente:

Imagen

Re: Generar estadísticas a partir de una tabla

Avatar de Nemox
* * * * * * *

(Nivel 1 - 30 posts)

#8 Offline Nemox Usuario 25 ene 10
Ya te entiendo mejor. Sólo necesitas dos series de datos: las fechas para el eje X y la suma de los mensajes de cada fecha para el eje Y.
Puedes guardarlos en dos arrays sencillos, pueden ser $fecha[] y $dato[]. Para conseguir la cantidad de mensajes en una fecha determinada puedes hacerlo con un simple count() de mysql.

Conocer bien el lenguaje SQL te abrirá muchas posibilidades.

Sí, ocho años después, tenemos firma :D

Re: Generar estadísticas a partir de una tabla

Avatar de Eloy8857
* * * * * * *

(Nivel 4 - 445 posts)

#9 Offline Eloy8857 Usuario 25 ene 10
Lo que quieres parece más un gráfico en 3D. Si en X tienes las fechas y en Y el número de consultas, necesitarías otro eje para representar el número del cliente; las clases de gráficos suelen permitir gráficos así.

También puedes hacer un gráfico por cliente o sobreponer gráficos si te lo permite la clase. En cualquier caso en el origen de datos deberás hacer el SELECT id_cliente, fecha, COUNT(*) AS numMensajes FROM ...
GROUP BY id_cliente, fecha. No ordenes porque el GROUP BY ya ordena.

Saludos.

Restless Souls Online: se viene un gran MMORPG

Re: Generar estadísticas a partir de una tabla

Avatar de ainvar
* * * * * * *

(Nivel 1 - 22 posts)

#10 Offline ainvar Usuario 25 ene 10
Nemox efectivamente necesito generar unos arrays como indico en el segundo post que envié. Los arrays tienen que tener esta forma:


$elemx[0][] = "2005-01-01";

$elemx[0][] = "2005-01-02";

$elemx[0][] = "2005-01-03";

$elemx[0][] = "2005-01-04";



$elemy[0][] = 87;

$elemy[0][] = 8;

$elemy[0][] = 83;

$elemy[0][] = 94;



$elemy[1][] = 5;

$elemy[1][] = 7;

$elemy[1][] = 3;

$elemy[1][] = 59;



$elemy[$i][] = 48;

$elemy$i][] = 49;

$elemy[$i][] = 29;
$elemy[$i][] = 23;

.....

.....

Lo que no se es generar la $i que se corresponda con cada cliente. Las fechas no son problema, pero si los datos de cada cliente según esa fecha.

Eloy8857 no necesito 3D, sólo un gráfico como el que pongo más arriba, en el que cada línea del gráfico corresponde a un cliente y sólo a uno, para ello necesito generar los arrays de arriba, donde cada array $elem[$i] corresponda a un cliente.

Alguna ayuda?

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

php-hispano.net 2002 - 2010 | XHTML 1.0
Datos Legales | Webmaster