Tengo una mesa con ventas. De esta tabla, tomo todos los resultados de los últimos 30 días, sumo los precios con la misma fecha y obtengo esto como una matriz.
SQL:
SELECT date , price , id , SUM(price) AS daylieprice FROM sales WHERE id = :id AND date BETWEEN DATE_FORMAT(CURDATE() , '%Y-%m-%d') - interval 1 month AND DATE_FORMAT(CURDATE() , '%Y-%m-%d')) GROUP BY date
Así que tengo por ejemplo:
ARRAY ['fecha'] - ARRAY ['precio del día']
"2017-03-29" - "1"
"2017-04-02" - "5"
"2017-04-04" - "3"
El gráfico de Google se ve así:
['<? echo date('d', strtotime("-2 day")) ?>', VALUE] ['<? echo date('d', strtotime("-1 day")) ?>', VALUE] ['<? echo date('d') ?> ', VALUE]¿Hay alguna manera de generar el valor de la matriz de esa manera?
date('d', strtotime("-2 day") , ARRAY ['daylieprice']); date('d', strtotime("-1 day") , ARRAY ['daylieprice']); date('d', ARRAY ['daylieprice']);¿Debería significar tomar el valor de la matriz fácilmente con date('d') o date('d', strtotime("-1 day") sin hacer un bucle para cada valor?
¿O tengo que hacer una solicitud de SQL para todos los días?
Se me ocurrió esto. Uso DateTime para dar más control y flexibilidad con los formatos de entrada y salida. Esto recorre su matriz de entrada y resta 2 días de la primera entrada, 1 día de la segunda entrada y mantiene la tercera entrada igual:
<?php $input = [ [ 'date' => '2017-03-29', 'daylieprice' => 1, ], [ 'date' => '2017-04-02', 'daylieprice' => 5, ], [ 'date' => '2017-04-04', 'daylieprice' => 3, ], ]; $output = []; $number_of_dates = count($input) - 1; foreach ($input as $v) { $date = DateTime::createFromFormat('Ym-d', $v['date']) ->modify(sprintf('-%d days', $number_of_dates)) ->format('Ym-d'); $number_of_dates--; $output[] = "'" . $date . "', " . $v['daylieprice']; }Esto produce una matriz como:
Array ( [0] => '2017-03-27', 1 [1] => '2017-04-01', 5 [2] => '2017-04-04', 3 )Espero que esto ayude y puedas descubrir exactamente cómo implementarlo para resolver tu problema.
Editar: acabo de ver echo date('d' así que tal vez solo desee el día del mes, eso es fácil, puede cambiar ->format('Ym-d'); en el ciclo a ->format('d');
Demostración: https://eval.in/784353