|
|
||||||
|
#1
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
"Á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
|
|
|
|
|
> 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
|
|
|
|
|
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
|
|
|
|
|
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
|