hilpers


  hilpers > comp.lenguajes.* > comp.lenguajes.php

 #1  
25-01-2010, 16:42
ainvar
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
 #2  
25-01-2010, 16:52
Álvaro G. Vicario
El 25/01/2010 17:42, ainvar escribió:
> 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.


¿Qué has intentado y en qué parte te has bloqueado? Porque tampoco te
vamos a escribir nosotros toda la aplicación :-P
 #3  
25-01-2010, 18:49
countach
En las nuevas, "Álvaro G. Vicario" escribió:
> El 25/01/2010 17:42, ainvar escribió:
>
> ¿Qué has intentado y en qué parte te has bloqueado? Porque tampoco te vamos a
> escribir nosotros toda la aplicación :-P


Lo mismo digo, y abundo:

Google tiene una API para gráficos bastante interesante:
http://code.google.com/intl/es-ES/apis/chart/
 #4  
25-01-2010, 19:47
ainvar
El 25/01/2010 17:52, "Álvaro G. Vicario" escribió:
> El 25/01/2010 17:42, ainvar escribió:
>
> ¿Qué has intentado y en qué parte te has bloqueado? Porque tampoco te
> vamos a escribir nosotros toda la aplicación :-P
>>

>


Hola Álvaro, gracias por responder, vamos a ver he hecho lo siguiente, primero hago un select a la
DB asi:

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

y luego en PHP intento rellenar un array que me sirva para escribir el gráfico con una clase que me
pide arrays del tipo $elemy[n][], el código que hice es:

<?php
do{
$codigo = $row_rsInmSms['Codigos'];
$fecha = $row_rsInmSms['fechaRecepcion'];
$total = $row_rsInmSms['total'];
$elemy[$codigo][] = $total;
}while($row_rsInmSms = mysql_fetch_assoc($rsInmSms));
print_r($elemy);
?>
Pero me pinta una línea solo (hay 2 idCliente) y con valores 0, sin embargo el prin_t($elemy) me
da esto:

Array ( [27002] => Array ( [0] => 1 [1] => 1 [2] => 3 ) [39001] => Array ( [0] => 1 [1] => 4 [2] =>
1 ) )

En el ejemplo de la clase crean 2 arrays $elemy[0][] y $elemy[1][], aunque debería ser lo mismo ¿no?

Gracias de nuevo por responder.
 #5  
26-01-2010, 08:27
Álvaro G. Vicario
El 25/01/2010 20:47, ainvar escribió:
> El 25/01/2010 17:52, "Álvaro G. Vicario" escribió:
>
> Hola Álvaro, gracias por responder, vamos a ver he hecho lo siguiente,
> primero hago un select a la DB asi:
>
> $query_rsInmSms = "SELECT idCliente AS Codigos, COUNT(idCliente) AS
> total, fechaRecepcion FROM mensajes GROUP BY idCliente, fechaRecepcion
> ORDER BY idCliente, fechaRecepcion";


Bueno, aunque no pones qué sale de aquí debería ser lo que necesitas.


> y luego en PHP intento rellenar un array que me sirva para escribir el
> gráfico con una clase que me pide arrays del tipo $elemy[n][],


¿Qué clase? ¿Qué formato es éste?


> el código que hice es:
>
> <?php
> do{
> $codigo = $row_rsInmSms['Codigos'];
> $fecha = $row_rsInmSms['fechaRecepcion'];
> $total = $row_rsInmSms['total'];
> $elemy[$codigo][] = $total;
> }while($row_rsInmSms = mysql_fetch_assoc($rsInmSms));
> print_r($elemy);
> ?>


$fecha no lo usas para nada y la última fila de la consulta tampoco.
Para mí que quieres algo como esto:

<?php

$elemy = array();
while($row_rsInmSms = mysql_fetch_assoc($rsInmSms){
$elemy[ $row_rsInmSms['Codigos'] ][ $row_rsInmSms['fechaRecepcion'] ] =
$row_rsInmSms['total']
}

?>


> Pero me pinta una línea solo (hay 2 idCliente) y con valores 0, sin
> embargo el prin_t($elemy) me da esto:
>
> Array ( [27002] => Array ( [0] => 1 [1] => 1 [2] => 3 ) [39001] => Array
> ( [0] => 1 [1] => 4 [2] => 1 ) )
>
> En el ejemplo de la clase crean 2 arrays $elemy[0][] y $elemy[1][],
> aunque debería ser lo mismo ¿no?


Insisto en que no sé a qué te refieres con eso de arrays sin claves :-?
 #6  
26-01-2010, 10:21
ainvar
El 26/01/2010 9:27, "Álvaro G. Vicario" escribió:
> $fecha no lo usas para nada y la última fila de la consulta tampoco.
> Para mí que quieres algo como esto:
>
> <?php
>
> $elemy = array();
> while($row_rsInmSms = mysql_fetch_assoc($rsInmSms){
> $elemy[ $row_rsInmSms['Codigos'] ][ $row_rsInmSms['fechaRecepcion'] ] =
> $row_rsInmSms['total']
> }
>
> ?>
>>

> Insisto en que no sé a qué te refieres con eso de arrays sin claves :-?
>>

Hola Álvaro, lo de los arrays sin claves es porque en el ejemplo de la clase para pintar el gráfico
pone esto:

$elemy = Array();
// #################################################

// #Y ELEMENTS FOR THE FIRST LINE###################
$elemy[0][] = 87;
$elemy[0][] = 8;
$elemy[0][] = 83;
$elemy[0][] = 94;
$elemy[0][] = 48;

// #################################################

// #Y ELEMENTS FOR THE SECOND LINE##################
$elemy[1][] = 5;
$elemy[1][] = 7;
$elemy[1][] = 3;
$elemy[1][] = 59;
$elemy[1][] = 87;

Así que intenté dibujar en vez de con 0 y 1 con los códigos. La fecha se usa para el eje x y es
similar, es decir:

$elemy = Array();
$elemx[0][] = "2010-01-17";
$elemx[0][] = "2010-01-18";
$elemx[0][] = "2010-01-21";
$elemx[0][] = "2010-01-22";
$elemx[0][] = "2010-01-24";

Esto pinta un gráfico similar a este:

http://3uvedoble.com/example_line.php.png

que es lo que yo quiero conseguir, pero dinamicamente, pero no coinsigo hacer bien la consulta o el
php, a estas alturas ya estoy bastante perdido, la verdad.

Gracias
 #7  
26-01-2010, 11:33
Álvaro G. Vicario
El 26/01/2010 11:21, ainvar escribió:
> El 26/01/2010 9:27, "Álvaro G. Vicario" escribió:
> Hola Álvaro, lo de los arrays sin claves es porque en el ejemplo de la
> clase para pintar el gráfico pone esto:
>
> $elemy = Array();
> // #################################################
>
> // #Y ELEMENTS FOR THE FIRST LINE###################
> $elemy[0][] = 87;
> $elemy[0][] = 8;
> $elemy[0][] = 83;
> $elemy[0][] = 94;
> $elemy[0][] = 48;


Vale... Esto es lisa y llanamente la sintaxis que utiliza PHP para
agregar elementos al final de un array numérico. Si quieres hacer un
programa con arrays tienes que aprender a usarlos. Puede que leerte el
manual te parezca un coñazo pero a la larga vas a ahorrar mucho tiempo
sobre el método de intentar adivinar las cosas:

http://es2.php.net/manual/en/language.types.array.php


> // #################################################
>
> // #Y ELEMENTS FOR THE SECOND LINE##################
> $elemy[1][] = 5;
> $elemy[1][] = 7;
> $elemy[1][] = 3;
> $elemy[1][] = 59;
> $elemy[1][] = 87;


¿Puedo preguntar qué opinión te ha merecido el código que puse en mi
mensaje anterior? ¿Lo has mirado? ¿Lo has probado? ¿Lo entiendes?


> Así que intenté dibujar en vez de con 0 y 1 con los códigos. La fecha se
> usa para el eje x y es similar, es decir:
>
> $elemy = Array();
> $elemx[0][] = "2010-01-17";
> $elemx[0][] = "2010-01-18";
> $elemx[0][] = "2010-01-21";
> $elemx[0][] = "2010-01-22";
> $elemx[0][] = "2010-01-24";
>
> Esto pinta un gráfico similar a este:
>
> [..]
>
> que es lo que yo quiero conseguir, pero dinamicamente, pero no coinsigo
> hacer bien la consulta o el php, a estas alturas ya estoy bastante
> perdido, la verdad.


Bueno, a estas alturas seguimos sin saber qué resultados devuelve tu
SQL, qué aspecto tienen tus arrays, qué librería gráfica estás
utilizando... y creo que el motivo de que no nos lo hayas contado es que
no lo sabes ni tú.

Tienes que programar con un poco más de método: cambiando cosas al azar
sin entender nada no te va a llevar a ninguna parte. Te propongo que
empieces el programa al revés:

1.- Averigua con qué librería estás intentado crear los gráficos: te la
tuviste que bajar de algún lado conque alguna idea tendrás.

2.- Busca la documentación de dicha librería. Casi seguro estará en su
página web.

3.- Localiza algún ejemplo del tipo de gráfico que quieres obtener.

4.- Créate un archivo en blanco y copia el ejemplo. Hazlo funcionar tal
cual.

5.- Si todo lo anterior ha ido bien, localiza la parte del código donde
se introducen los datos y cámbialos a pedal por algunos datos tuyos
fijos. Mira si sigue saliendo bien el gráfico.

6.- Vuelve aquí y cuéntanos tus progresos. Puedes copiarnos el archivo
con el que estás trabajando.
 #8  
26-01-2010, 15:40
ainvar
El 26/01/2010 12:33, "Álvaro G. Vicario" escribió:
[..]
> cual.
>
> 5.- Si todo lo anterior ha ido bien, localiza la parte del código donde
> se introducen los datos y cámbialos a pedal por algunos datos tuyos
> fijos. Mira si sigue saliendo bien el gráfico.
>
> 6.- Vuelve aquí y cuéntanos tus progresos. Puedes copiarnos el archivo
> con el que estás trabajando.
>

Hola Álvaro, la verdad es que estoy más perdido que un pulpo en un garaje.

Intento entender lo que hago, pero es la primera vez que hago algo así y además como siempre con
prisas, te pego el código que genera el gráfico a ver si me dices algo.

En cuanto a la librería la bajé de phpclasses.org y sólo trae unos ficheros de ejemplo, no tiene
documentación, ni página web. En cuanto al ejemplo es el que te pegué en un mensaje anterior. Ya he
creado el archivo en blanco y lo he hecho funcionar con los datos que te pegué antes, el resultado
es el gráfico que pegué (con datos míos a pedal, como dices), el problema es que no consigo generar
los arrays con los datos de mi tabla, además en el ejemplo sólo hay 2 líneas (me refiero a 2
clientes realmente) y debería poder funcionar con cualquier nº de clientes.

Bueno el código que debería generar el gráfico es este:

<CODIGO>
<?php require_once('../Connections/conn.php'); ?>
<?php
mysql_select_db($database_conn, $conn);
$query_rsInmSms = "SELECT idCliente AS Codigos, COUNT(idCliente) AS total, fechaRecepcion FROM
mensajes GROUP BY idCliente, fechaRecepcion ORDER BY idCliente, fechaRecepcion";
$rsInmSms = mysql_query($query_rsInmSms, $conn) or die(mysql_error());
$row_rsInmSms = mysql_fetch_assoc($rsInmSms);
$totalRows_rsInmSms = mysql_num_rows($rsInmSms);


/* #FILE DESCRIPTION################################
Example for the line graph
################################################# */

// #INCLUDE#########################################
require("charts.class.php");
// #################################################

// #INSTANTIATING CLASS#############################
$g = new chart;
// #################################################

// #X ELEMENTS FOR THE FIRST LINE###################
$elemx = array();
do{
$elemx[0][] = $row_rsInmSms['fechaRecepcion'];
}while($row_rsInmSms = mysql_fetch_assoc($rsInmSms));
$rows = mysql_num_rows($rsInmSms);
if($rows > 0) {
mysql_data_seek($rsInmSms, 0);
$row_rsInmSms= mysql_fetch_assoc($rsInmSms);
}
// #FINDING THE MAX NUMBER OF X ELEMENTS############
$xcount = 0;
foreach ($elemx as $v)
$xcount = max($xcount, count($v));
// #################################################

// #Y ELEMENTS FOR THE FIRST LINE###################
$elemy = array();
while($row_rsInmSms = mysql_fetch_assoc($rsInmSms)){
$elemy[$row_rsInmSms['Codigos']][] = $row_rsInmSms['total'];
}
// #BIGGEST Y ELEMENT###############################
$ymax = 0;
foreach ($elemy as $v)
$ymax = max($ymax,ceil(max($v)));
// #################################################

// #CALCULATING THE DIFFERENCE######################
$dif = array_sum($elemy[27002]) - array_sum($elemy[39001]);
// #################################################

// #POPULATING GRAPH################################
foreach ($elemy as $k => $v)
foreach ($v as $kk => $vv)
{
$g->xValue[$k][] = $elemx[$k][$kk];
$g->DataValue[$k][] = $vv;
}
// #################################################

// #SETTING GRAPH PARAMETERS########################
$g->Title = "Total de mensajes por día";
$g->SubTitle = " ";
$g->Width = ($xcount*75) + 75;
$g->Height = 300;
$g->ShowBullets = TRUE;

$g->LineShowCaption = TRUE; // TO BE FIXED YET
$g->LineShowTotal = TRUE; // DEPENDS ON LineShowCaption to be TRUE
$g->LineCaption[0] = "Cliente 1";
$g->LineCaption[1] = "Cliente 2";
$g->LineCount = 2;

$g->xCount = $xcount;
$g->xCaption = " ";
$g->xShowValue = TRUE;
$g->xShowGrid = FALSE;

$g->yCount = 10;
$g->yCaption = "Mensajes por Día";
$g->yShowValue = TRUE;
$g->yShowGrid = TRUE;

$g->DataDecimalPlaces = 0;
$g->DataMax = $ymax;
$g->DataMin = 0;
$g->DataShowValue = TRUE;
// #################################################

// #ITS DRAWING TIME################################
$g->MakeLinePointChart();
// #################################################
?>
</CODIGO>

Si ejecuto la consulta, relleno el array y lo imprimo me da lo siguiente, print_r($elemy) da esto:

Array ( [27002] => Array ( [0] => 1 [1] => 3 ) [39001] => Array ( [0] => 1 [1] => 4 [2] => 1 ) )

Pero sin embargo el gráfico pinta una línea con valores 0, este es:

http://3uvedoble.com/graf_line.png

Bueno, no se si me puedes ayudar, la verdad es que yo no doy más y estoy bastante desesperado, pues
es una aplicación bastante grande y estoy perdiendo mucho tiempo para hacer esto que sólo es de
decoración realmente.

Muchas gracias por el interés. Si quieres la clase te la envío por email o la subo a algún sitio.
 #9  
26-01-2010, 16:34
Álvaro G. Vicario
El 26/01/2010 16:40, ainvar escribió:
> El 26/01/2010 12:33, "Álvaro G. Vicario" escribió:
>
> Hola Álvaro, la verdad es que estoy más perdido que un pulpo en un garaje.
>
> Intento entender lo que hago, pero es la primera vez que hago algo así y
> además como siempre con prisas, te pego el código que genera el gráfico
> a ver si me dices algo.
>
> En cuanto a la librería la bajé de phpclasses.org y sólo trae unos
> ficheros de ejemplo, no tiene documentación, ni página web.


El tema es que es imposible ayudarte a usar una librería si no nos das
la menor pista de cuál es. A veces, aunque no la hayas utilizado nunca,
puedes echarle un vistazo y adivinar cómo va.


[..]
> <CODIGO>
> <?php require_once('../Connections/conn.php'); ?>
> <?php
> mysql_select_db($database_conn, $conn);
> $query_rsInmSms = "SELECT idCliente AS Codigos, COUNT(idCliente) AS
> total, fechaRecepcion FROM mensajes GROUP BY idCliente, fechaRecepcion
> ORDER BY idCliente, fechaRecepcion";
> $rsInmSms = mysql_query($query_rsInmSms, $conn) or die(mysql_error());
> $row_rsInmSms = mysql_fetch_assoc($rsInmSms);
> $totalRows_rsInmSms = mysql_num_rows($rsInmSms);



Esto es justo lo que quería evitar con mis seis puntos. Llegado al
estado de pulpo en garaje, la forma más difícil de salir es lanzarse de
cabeza en el medio de una aplicación gigante. Tienes que probar cada
cosa por separado para poder entender cada paso y ver dónde está fallo.
Si puedes generar el gráfico con dos líneas metiendo los números a mano,
el siguiente paso es intentar meter tres líneas a mano, no ponerte a
consultar la base de datos sin saber todavía qué datos necesitas. Y con
"a mano" me refiero exactamente a eso:

$elemx[0][] = 10;
$elemx[0][] = 20;
$elemx[0][] = 30;
$elemx[1][] = 15;
$elemx[1][] = 25;
$elemx[1][] = 35;



[..]
> $dif = array_sum($elemy[27002]) - array_sum($elemy[39001]);
> // #################################################
>
> // #POPULATING GRAPH################################
> foreach ($elemy as $k => $v)
> foreach ($v as $kk => $vv)
> {
> $g->xValue[$k][] = $elemx[$k][$kk];
> $g->DataValue[$k][] = $vv;
> }


Yo diría que ésta es la parte importante. El objeto $g tiene dos
atributos públicos, $g->xValue y $g->DataValue, donde se recogen todos
los valores. Puedes hacerles sendos print_r() para ver qué contienen
exactamente y rellenamos de la misma manera.



[..]
> $g->MakeLinePointChart();
> // #################################################
> ?>
> </CODIGO>
>
> Si ejecuto la consulta, relleno el array y lo imprimo me da lo
> siguiente, print_r($elemy) da esto:
>
> Array ( [27002] => Array ( [0] => 1 [1] => 3 ) [39001] => Array ( [0] =>
> 1 [1] => 4 [2] => 1 ) )


Pero como todavía no sabemos qué pinta tienen unos datos buenos, no
podemos saber por qué éstos son malos.
 #10  
26-01-2010, 17:29
ainvar
Gracias por todo Álvaro, voy a mirar lo que me dices, en cuanto a la aplicación gigante, está
practicamente acabada, faltan detalles como este de las estadísticas, que son cosas menores, el
resto es a base de alta, modificación y borrado de datos, de los cuales sacamos unos listados muy
bonitos y eso, lo de las gráficas como te digo es para hacer bonito, pero pueden sacar esos datos de
otras formas en base a tablas (html), pero me lo están pidiendo con bastante insistencia y la verdad
es que es la primera vez que me meto en este campo. Intentaré seguir tus consejos y a ver si consigo
hacer algo. Lo dicho, muchas gracias y hasta la próxima.
 #11  
26-01-2010, 17:47
Álvaro G. Vicario
El 26/01/2010 18:29, ainvar escribió:
> Gracias por todo Álvaro, voy a mirar lo que me dices, en cuanto a la
> aplicación gigante, está practicamente acabada, faltan detalles como
> este de las estadísticas, que son cosas menores, el resto es a base de
> alta, modificación y borrado de datos, de los cuales sacamos unos
> listados muy bonitos y eso, lo de las gráficas como te digo es para
> hacer bonito, pero pueden sacar esos datos de otras formas en base a
> tablas (html), pero me lo están pidiendo con bastante insistencia y la
> verdad es que es la primera vez que me meto en este campo. Intentaré
> seguir tus consejos y a ver si consigo hacer algo. Lo dicho, muchas
> gracias y hasta la próxima.


Pues nada, suerte y a aprender mucho también. Me ha emocionado ver
mensajes en este grupo por primera vez en meses :)
 #12  
26-01-2010, 18:06
Shake
"Álvaro G. Vicario" a exposé le 26/01/2010 :
>
> Me ha emocionado ver mensajes
> en este grupo por primera vez en meses :)



Algun que otro lurker esta(mos) en las mismas. :)
 #13  
27-01-2010, 20:56
Cheli Pineda Ferrer
> Pues nada, suerte y a aprender mucho también. Me ha emocionado ver
> mensajes en este grupo por primera vez en meses :)
>


A mi también se me saltan las lágrimas xDD

Saludos.
 #14  
28-01-2010, 09:04
ainvar
El 27/01/2010 21:56, Cheli Pineda Ferrer escribió:
>> Pues nada, suerte y a aprender mucho también. Me ha emocionado ver
>> mensajes en este grupo por primera vez en meses :)
>>

>
> A mi también se me saltan las lágrimas xDD
>
> Saludos.
>


Me alegra haberos dado tamaña alegría a todos, por cierto que ya conseguí hacer lo que quería, en
parte gracias a las pistas que me dió Álvaro. Es una pena que las news estén como están porque creo
que es mejor que los foros web, pero bueno así son las modas.

Si a alguien le interesa, que lo diga para poner el código final, por si le sirviera de algo.

Un saludo a todos.
 #15  
28-01-2010, 09:18
Álvaro G. Vicario
El 28/01/2010 10:04, ainvar escribió:
> Si a alguien le interesa, que lo diga para poner el código final, por si
> le sirviera de algo.


No te cuesta nada y a lo mejor en el futuro ahorras a alguien el clásico
disgusto de buscar algo en Google y encontrar únicamente un mensaje que
pregunta lo mismo :)
Temas Similares
sacar ceros de una tabla

hola amigos, tengo una tabla que contiene campos numericos y lo que quiero lograr es sacar los ceros y volcar a otra tabla los resultados ya sin ceros ejemplo: tabla...

Sacar el ultimo registro de una tabla

Estimados. Utilizo SS2000 SP4 Para sacar el ultimo registro de una tabla estoy haciendo esto: select a.codcli,a.ano,a.emision,a.tipositu from ra_situ A Inner Join ( select...

Sacar metadata de una tabla

Saludando. Como puedo sacar metadata de una tabla de sql server? Me explico, ejemplo quiero saber las expresiones Default de cada columna. Y tambien el nombre de la columna...

Sacar datos de sql a una tabla

Buenas, tengo una pagina asp que conecta con una base de datos sql server y quiero que me muestre en una tabla en la web los datos de una tabla contenida en el sql, me...

Sacar Estadisticas De Corres Recibidos y Enviados

Buenos dias Me están pidiendo que saque una estadistica de los correos recibidos y enviados, tanto globalmente como de cada usuario Al ser novato en esto de Exchange no...


La franja horaria es GMT. Ahora son las 19:53. | Privacy Policy