« first day (1825 days earlier)      last day (34 days later) » 

12:50 AM
@quevedo Hola bro como estas ?
 
@JuanPerez hola. Si es php vanilla
@JuanPerez hola
 
Ando con un problema bro
 
o javascript vanilla, o Jquery puedo tratar de ayudar
 
Vamos con PHP
 
dale
 
12:53 AM
Te comento un poco, estoy tratando de hacer un grafico con highcharts con una data que tengo en tabla MySQL con los ultimos 7 días
 
Ah, he visto que tratas mucho sql. no puedes dejar de leer esto: The proper PDO tutorial
 
Tengo una tabla resumen donde esta almacenando lo siguiente:
 
te sigo (no he usado highcharts) estoy consultando para orientarme
 
En la tabla resumen puede que se registren datos todas las horas desde 00 hasta las 23 horas como pueden que solo existan intervalos de horas
 
listo quieres mostrar una gráfica hora valor
 
12:57 AM
Si te das cuenta por cada hora puede que se registren 2 filas (1. IC, 2. OG) no siempre esto sucede puede que venga ambos o uno solo
Me sigues hasta ahí ?
 
0 a 24 columnas? ponderadas
si
 
Vale
 
quieres algo como un diagrama de torres
 
Entonces hago la consulta (MySQL) para obtener la data de los últimos 7 días
 
dos colores o uno por hora
 
12:58 AM
Espera
La grafica no es el problema que estoy ahora
 
¿promediar semanas?
contrastando horas
atiendo y dejo de adelantarme
 
Actualmente estoy sacando este grafico de los ultimos 7 días pero si te fijas el grafico no esta completo faltan días
Corrrecto ?
Esto es un grafico lineal por horas
 
Aparentemente no se ven las horas
 
Además el grafico esta mal porque ahí registros que no tienen todas las horas
Esta graficando cualquier cosa ya que no siempre en todos los dias puede que vengan registros desde las 00 hasta las 23
Me sigues hasta ahí ?
 
si
 
1:04 AM
Vale
Entonces que es lo que he estado haciendo..
Hace la consulta la base de datos y la almaceno en una variable llamada listado
Al hacer un print_r($listado); me trae esto:
Son muchos mas registros (recuerda que no siempre vienen registros en todas las horas)
Lo que he estado tratando de hacer es lo siguiente:
1. Extraigo las fechas:
$fecha  = array();
foreach ($listado as $key => $value) {
      if (!in_array($value["fecha_cortada"], $fecha)) {
        array_push($fecha, $value["fecha_cortada"]);
      }
    }
2. Pinto las horas del día:
    $horas  = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"];

$item   = array();
    foreach ($fecha as $key) {
            for($i = 0; $i < 23; $i++ )
            {
                $data = array(
                    'fecha'         => $key." ".$horas[$i],
                    'fecha_cortada' => $key,
                    'hora_cortada'  => $horas[$i],
                    'IC'            => 0,
                    'OG'            => 0
Confirmame si me sigues hasta ahí ?
 
1. usa esta sintaxis es mas clara: array_push($fecha, $value["fecha_cortada"]); puede reemplazarse con $fecha[] = $value["fecha_cortada"];
2. for($i = 0; $i < 23; $i++ ) no funciona debe ser for($i = 0; $i < 24; $i++ )
 
Vale
Entonces ya ahí tengo las fechas con las horas unidas cierto ?
 
@JuanPerez parece que inicializas fechas con horas
 
Correcto
Ya te mando una salida de $item
 
$item está preparando una plantilla que va a recibir la lectura
 
1:17 AM
Si, fijate que hice a IC y OG = 0
Esto es para rellenar las horas que no existan en la data original me explico ?
 
si, no necesita explicación aseguras los defaults
 
Vale
 
ahora recorres y llenas
 
Eso, pero ahí ahora no encuentro como hacer para recorrer y llenar
 
y ahí puede haber problema, pudiste poner claves que agilicen el acceso
 
1:20 AM
Hay que hacer comparaciones si no vienen las variables en las horas
 
no
 
Intente hacerlo y me arrojo esto errores:
Message: Trying to access array offset on value of type null
Lo que intente hacer:
 
espera te propongo como preparar el array $item de modo que sea facil la tarea
 
Vale
 
1. Sabes que vas a recorrer n días, 23, horas c/u y dentro habrá valores IC e OG
 
1:22 AM
Y su valor de cada uno de ellos
 
Listo, entonces hacemos un protocolo de creación de claves
 
Ah vale
 
function crearClaveDiaHora($dia, $hora, $sufijo){ ... }
$dia viene como aparece 'fecha_cortada' en tu array
 
De cual array estaríamos hablando ?
 
@JuanPerez print_r($listado);
 
1:27 AM
Vale
 
ej Oct 22
$hora viene como se espera que venga 'hora_cortada'
Volvamos a la función
 
Vale
 
function crearClaveDiaHora($dia, $hora, $sufijo){
` $clave = str_replace(' ', '-', $dia).'-'.$hora.'-'.$sufijo;`
return $clave;
}
Ahora construimos un array de defaults
 
Vale
 
function construirDefaults($semana){ ... }
La semana vendrá preparada así:
$semana = ['Oct 22', ... etc ];
tu la preparas fuera dependiendo de cual vas a encargar para que el código sea reutilizable
ahora la función (dame un segundo mientras cargo un editor de texto y la escribo
 
1:35 AM
Ya la semana viene en la base de datos directamente
 
@JuanPerez mejor
 
Osea viene esto: Oct 22
El día
En la grafica se necesita pintar el día y la hora
 
function construirDefaults($semana){
$horas = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"];

$item = []; //nueva sintaxis
foreach ($semana as $dia) {
foreach($horas as $hora)
{
$item[ crearClaveDiaHora($dia, $hora, 'IC' ) ] = 0;
$item[ crearClaveDiaHora($dia, $hora, 'OG' ) ] = 0;
}
}
return $item;
}
Ya está inicializado el array con todos los valores
y tiene claves que permiten acceso directo
ahora, en una sola lectura tenemos todo
vamos a recorrer el listado por la fácil
function recorrerListado($listado, &$item){ ... }
¿me sigues?
 
Te sigo bro
 
espera lo escribo
 
1:47 AM
Hola a todos
 
Buenas..
 
Que tal @JuanPerez
 
`function recorrerListado($listado, &$item){
foreach($listado as $reg ){
$clave = crearClaveDiaHora( $reg['fecha_cortada'], $reg['hora_cortada'], $reg['Descripcion]);
$item[$clave] = $reg['total'];
}
}`
 
@BetaM Bien y tu ?
 
@BetaM hola gusto de verte
@JuanPerez fijate que al recorrer el listado se usa la creación de claves para asignar los valores existentes sin preocuparte de nada
 
1:51 AM
@quevedo Exactamente lo estoy analizando para entenderlo
@quevedo Entonces, $item es el encargado de tener toda la data
 
@JuanPerez si
para eso lo inicializaste
al hacer el recorrido actualizas con facilidad dónde hay datos
 
Vale, le haré un print_r($item); para mirar el resultado
 
y para pasar a graficar tambien es facil recorrer los intervalos y asociar sus valores
 
Severity: Notice


Message: Undefined variable: item
 
esperá en que momento
hiciste $item = function construirDefaults($semana);
 
1:59 AM
Al parecer solo existe dentro de las funciones..
No
 
Por eso no existe
Ordenemos
 
function crearClaveDiaHora($dia, $hora, $sufijo){

        $clave = str_replace(' ', '-', $dia).'-'.$hora.'-'.$sufijo;
        return $clave;
    }

    function construirDefaults($semana){

        $horas = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"];

        $item = []; //nueva sintaxis
        foreach ($semana as $dia) {
            foreach($horas as $hora)
            {
                $item[ crearClaveDiaHora($dia, $hora, 'IC' ) ] = 0;
 
falta:
$item = construirDefaults($semana);
pero $semana me dices que la lees en la BD
 
No, semana no existe solo el día
Oct 22, Oct 23, etc..
 
Pongamos un poco de orden
1. Quieres graficar una semana
 
2:03 AM
Si, pero con los datos que están en la BD osea sería un rango de fechas
 
ej oct 20 a oct 26
 
Exacto
 
perfecto
Tienes un formato para fechas?
 
Correcto, el formato es fechas
 
function prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt){
 
2:07 AM
Cómo te va @quevedo que dicen los deberes laborales?
 
@BetaM bien, tu?
@JuanPerez usas un método para generar el array de control de dísa de la semana
 
No solo en la consulta MySQL te la muesto:
 
nota observa $maxdiasmes = 28 | 29 | 30 | 31 dependiendo de mes y si es o no bisiesto
 
SELECT fecha_cortada,hora_cortada,description,total
FROM tabla_resumen
WHERE fecha_cortada >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 5 DAY),'%b %e')
	AND fecha_cortada <= DATE_FORMAT(NOW(),'%b %e')
GROUP BY fecha_cortada,hora_cortada,description
ORDER BY fecha_cortada,hora_cortada ASC
 
@JuanPerez se sabe que en la consulta vienen
pero no es seguro que vengan todos los días no todas la horas según te entendí
y no tiene sentido recorrerla para recoger las fechas
 
2:11 AM
Exactamente
 
entonces es más barato preparar un array sabiendo el formato esperado
 
Ah vale
 
sabemos como va a venir, sabemos que la semana inicia en 20 y que oct tiene 31 días
sabemos que su avreviatura es Oct y la que sigue Nov
 
Dale
 
eso es lo que debemos usar para tener un caballo de batalla enjaezado
 
2:14 AM
Vale bro te entiendo
 
agregamos una función al script para preparar semanas a presentar
 
Vale
Entonces falta agregar esto :
$item = construirDefaults($semana);
?
 
ya
function prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt){
$semana = [];
for($i=0; $i < 7; $i++){
$suma = $dia + $i;
if($suma > $maxdiasmes){
$nvodia = $suma - $maxdiasmes;
$prefijo = $abrmessgt . ' ' ;
}else{
$nvodia = $suma;
$prefijo = $abrvmes . ' ' ;
}
$emana[] = ($nvodia > 9) ? $prefijo . $nvodia : $prefijo . '0'. $nvodia;
} return $semana;
}
me había faltado devolver la semana
Con los métodos listos ejecutamos
tienes la consulta en $listado y quieres la semana que inicia el 20
 
$item = construirDefaults($semana);
Agrego esto ?
 
esperá
 
2:26 AM
Vale
 
Situación de entrada
tenemos $listado obtenido de la consulta
 
Correcto
 
preparamos: $dia = 20; $abrvmes = 'Oct'; $maxdiasmes = 31'; $abrmessgt ='Nov';
$semana = prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt);
$item = construirDefaults($semana);
 
Te sigo
 
ejecutamos
recorrerListado($listado, $item);
echo $item;
 
2:31 AM
Dale
Ejecuto ?
 
siu
Ya no debe generar errores
espero
 
Severity: Notice

Message: Undefined variable: semana
Así tengo el código:
function crearClaveDiaHora($dia, $hora, $sufijo){

        $clave = str_replace(' ', '-', $dia).'-'.$hora.'-'.$sufijo;
        return $clave;
    }

    function construirDefaults($semana){

        $horas = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"];

        $item = []; //nueva sintaxis
        foreach ($semana as $dia) {
            foreach($horas as $hora)
            {
                $item[ crearClaveDiaHora($dia, $hora, 'IC' ) ] = 0;
 
recuerda que el método prepararRangoSemana se me fue sin devolver salida y edite
te falta ```function prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt){
$semana = [];
for($i=0; $i < 7; $i++){
$suma = $dia + $i;
if($suma > $maxdiasmes){
$nvodia = $suma - $maxdiasmes;
$prefijo = $abrmessgt . ' ' ;
}else{
$nvodia = $suma;
$prefijo = $abrvmes . ' ' ;
}
$emana[] = ($nvodia > 9) ? $prefijo . $nvodia : $prefijo . '0'. $nvodia;
}
return $semana;
}```
sin ella no estás preparando nada
 
Si la tengo agregada
 
me equivoque
ya vi
esto faltó
 
2:37 AM
Tranquilo no pasa nada
 
$dia = 20; $abrvmes = 'Oct'; $maxdiasmes = 31'; $abrmessgt ='Nov';
$semana = prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt);
$item = construirDefaults($semana);
sin llamar al método no se ha hecho nada
 
Dale, así tal cual me arroja un array vacío
 
¿corregiste?
 
Si, me devuelve un array vacío
Agregue esas ultimas líneas que me enviaste
Te digo, no hay registros para 'Nov'
 
lo se
pero el método está pensado para servir en cualquier semana de cualquier mes
 
2:43 AM
Buena
 
la prox empleza el 27 y cubre 3 días de nov
entonces por disciplina de uso ponemos los parámetros
se pueden poner opcionales y no falla; slvo que cuando sea necesario ponerlos se pueden olvidar
Hagamos un último ajuste para probar
 
Vale
No hay drama
 
jajaja
el script debe tener
1. los tres métodos
2. Recibe $listado de alguna parte
3. estas lineas:
$dia = 20; $abrvmes = 'Oct'; $maxdiasmes = 31'; $abrmessgt ='Nov';
$semana = prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt);
$item = construirDefaults($semana);
recorrerListado($listado, $item);
 
Correcto
 
echo $item;
nada más
 
2:50 AM
Si primero están las funciones arriba y al final los llamados
 
se fue un typo
$emana[] = debe ser $semana[] =
 
Son 4 métodos
 
ojo
me comi una s *****
esta línea
$emana[] = ($nvodia > 9) ? $prefijo . $nvodia : $prefijo . '0'. $nvodia;
debe ser
 
Ya la corregí bro
 
$semana[] = ($nvodia > 9) ? $prefijo . $nvodia : $prefijo . '0'. $nvodia;
jajaja
por eso daba array vacío
no se agregaba al que se devuelve
 
2:56 AM
Vale bro
Lo pruebo ?
 
si
 
Array
(
    [Oct-20-00-IC] => 0
    [Oct-20-00-OG] => 0
    [Oct-20-01-IC] => 0
    [Oct-20-01-OG] => 0
    [Oct-20-02-IC] => 0
    [Oct-20-02-OG] => 0
    [Oct-20-03-IC] => 0
    [Oct-20-03-OG] => 0
    [Oct-20-04-IC] => 0
    [Oct-20-04-OG] => 0
    [Oct-20-05-IC] => 0
    [Oct-20-05-OG] => 0
    [Oct-26-16-OG] => 0
    [Oct-26-17-IC] => 0
    [Oct-26-17-OG] => 0
    [Oct-26-18-IC] => 0
    [Oct-26-18-OG] => 0
    [Oct-26-19-IC] => 0
    [Oct-26-19-OG] => 0
    [Oct-26-20-IC] => 0
    [Oct-26-20-OG] => 0
    [Oct-26-21-IC] => 0
    [Oct-26-21-OG] => 0
    [Oct-26-22-IC] => 0
    [Oct-26-22-OG] => 0
    [Oct-26-23-IC] => 0
    [Oct-26-23-OG] => 0
)
Trae eso bro
 
y ejecutaste recorrerListado
 
$dia = 20; $abrvmes = 'Oct'; $maxdiasmes = 31; $abrmessgt = 'Nov';
$semana = prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt);
$item = construirDefaults($semana);
Actualmente con esto
 
y, los días intermedios
ejecuta:
echo $semana;
 
3:03 AM
Esta imprimiendo todas las horas
Pero el IC y OG todos vienen en 0
 
verifiquemos en leer listado
echo $clave;
 
Array
(
    [0] => Oct 20
    [1] => Oct 21
    [2] => Oct 22
    [3] => Oct 23
    [4] => Oct 24
    [5] => Oct 25
    [6] => Oct 26
)
Eso es lo que trae semana
 
es lo que debe ser
el problema está en recorrerListado
las cosas vienen distinto
ejecuta dentro del loop de recorrerListado
 
function recorrerListado($listado, &$item){
        foreach($listado as $reg ){
            $clave = crearClaveDiaHora( $reg['fecha_cortada'], $reg['hora_cortada'], $reg['descripcion']);
            $item[$clave] = $reg['total'];
            echo $clave;
        }
    }
No me muestra nada
 
var_dump( [$reg['fecha_cortada'], $reg['hora_cortada'], $reg['descripcion'] );
var_dump($reg)
necesitamos ver que trae para formatear correctamente, parece que trae algo que no se ve en echo
 
3:10 AM
En blanco
 
y el $listado ¿lo recogiste de la consulta?
 
Correcto
 
var_dump($reg) debe mostrar algo
 
Si hago un var_dump($listado); al principio me trae los datos de la base de datos
$dia = 20; $abrvmes = 'Oct'; $maxdiasmes = 31; $abrmessgt = 'Nov';
$semana = prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt);
$item = construirDefaults($semana);
Puede ser porque no esta incovada acá ?
 
debe haber sido pasado al script
si listado no ha sido asignado ahí estamos en el aire
 
3:14 AM
No estamos corriendo eso nada mas
 
yo supongo todo el tiempo que lo tienes cargado y visible en el ámbito
 
function recorrerListado($listado, &$item){
Bro el "&$item" esta mal ?
 
no
en ese momento $listado existe o no?
lo trajiste?
 
function crearClaveDiaHora($dia, $hora, $sufijo){

        $clave = str_replace(' ', '-', $dia).'-'.$hora.'-'.$sufijo;
        return $clave;
    }

    function construirDefaults($semana){

        $horas = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"];

        $item = []; //nueva sintaxis
        foreach ($semana as $dia) {
            foreach($horas as $hora)
            {
                $item[ crearClaveDiaHora($dia, $hora, 'IC' ) ] = 0;
Tal cual esta el script así bro
 
y acto seguido debes ejecutar
recorrerListado($listado, $item);
 
3:18 AM
Vale bro ahí si muestra datos
 
ahora, puedes recorrer casi igual para pasar a graficar
 
Así esta imprimiendo esto:
var_dump( [$reg['fecha_cortada'], $reg['hora_cortada'], $reg['descripcion'] );
 
para cada dia y hora y caso
 
Bro pero sabes una cosa
Esto va a tener una busqueda de fechas
 
sabes como las formateaste, es fácil sacarlas
como muestra las claves?
 
3:24 AM
Yo me refería era porque la data esta cargando desde el 20
 
nope
 
SELECT fecha_cortada,hora_cortada,description,total
            FROM tabla_resumen
            WHERE fecha_cortada >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 5 DAY),'%b %e')
								AND fecha_cortada <= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 2 DAY),'%b %e')
            GROUP BY fecha_cortada,hora_cortada,description
            ORDER BY fecha_cortada,hora_cortada ASC
 
escoge el día que quieras como inicio de semana
 
Y en la consulta yo tengo esto
$dia = 20; $abrvmes = 'Oct'; $maxdiasmes = 31; $abrmessgt = 'Nov';
Y esto no debe ser desde la base de datos que traiga
 
agrega otro parametro
function prepararRangoSemana($dia, $abrvmes, $maxdiasmes, $abrmessgt, $numdias=7){
$semana = [];
for($i=0; $i < $numdias; $i++){
$numdias puede ser 2, 5 o lo que quieras que dure la semana a mostrar
 
3:28 AM
Porque en el sistema tendra un calendario fecha inicio y fecha final
Entonces la busqueda se hara de acuerdo a esas fechas
 
entonces preparas tu semana de acuerdo a ellas
alteras el método a conveniencia
 
Es mas automaticamente tiene que traer la fecha actual y de ahí que reste los 7 días asi como esta en la consulta
 
entonces: tomas el día de hoy y le restas 6 días antes de hacer la consulta y preparas la semana empezando en hoy - 6
 
Si eso es lo que voy hacer
 
y a prepararRangoSemana le pasas como día de inicio ese día
total el método no reconoce si empieza en lúnes o jueves
se extiende 7 días
 
3:33 AM
Si voy a tener que sacar el día, el mes, y el mes siguiente
?
 
y controla si bcambia el mes
el prefijo
la abreviatura de meses
puedes teerla en una lista
de 13 meses
enero a enero
para saber el siguiente desde el numero sig de [11] es [12] Dic a Ene
 
Si bro
Con esto puedo arrancar para ver como diablos pinto el grafico jajaja
 
espera yo hago mis gráficos en php con GD
imagecreate
e imagecreatetruecolor
 
Ah vale
 
mira este ejemplo torta
 
3:43 AM
No me deja acceder
 
jajaja me equivoque
falta .com
la dirección es sintetice.com/img/pies/…
Ahora si la muestra
y los colores son aleatorios
 
Ah vale bro ya entiendo
 
entonces tu puedes generar tus propias gráficas (reinventar la rueda) pero nadie te impone restricciones
 
Voy a pensar como armar este grafico bien
 
me cuentas!
 
3:49 AM
Vale bro, gracias por tu ayuda te debo otra
 
voy a extender mis clase generadoras de pasteles a gráficas de segmentos
de nada
ayudar siempre da ideas al que ayuda
 
Gracias bro!!
Ya voy a descansar nos vemos mañana!
Buenas noches!
 
@JuanPerez ~_-:
que descanses
 
 
2 hours later…
6:13 AM
Wenas
 
 
1 hour later…
7:26 AM
A las güenas :-)
 
@Trauma ¿cómo va todo?
 
@MauricioContreras Pues ya sabes ... aguantando :-/
¿ Y tú ? ¿ Como lo llevas ?
 
7:52 AM
Buenos días
Serían mejores si no tuviese que hacer php peeeroo... al menos ya no me da tanto asco
 
@Aritzbn Por ahí se empieza ... cualquier día de estos dirás que te gusta y todo O_o
 

« first day (1825 days earlier)      last day (34 days later) »