MYSQL и PHP рассчитывают общую стоимость таблицы заказов каждый день и каждый месяц, заполняют новую сводную таблицу

У меня есть таблица заказов в моей БД (id_order, цена, описание, доставка) мне нужно рассчитать общую стоимость за каждый день

я использую это

$date = date("Y-m-d"); 

$query55 = "SELECT id_order, price FROM orders WHERE delivery LIKE '%$date%'";
$result55 = mysql_query($query55) or die(mysql_error());

while ($row55 = mysql_fetch_array($result55))
{
$currency = $row55['id_currency'];
$id = $row55['id_order'];

    if ($currency == "1")
{
    echo '
        <tr>
        <td style="width: 120px;">' . $id_order . '</td>
        <td style="width: 120px;">EUR</td>
        <td style="width: 170px;">' . $row55['price'] . '</td>
        </tr>

';
        $somma_paid += $row55['price'];

}

и это работает

В конце у меня есть общий день для переменной $somma_paid.

Я хотел бы сделать это для каждого дня года в автоматическом режиме. Потому что мне нужно ежемесячно всего. Мне нужно 30/31 строк с каждым итоговым днем ​​30/31

каждый день я должен выполнять этот скрипт. Могу ли я изменить его, чтобы запрашивать ежемесячную сумму каждый раз за каждый месяц. Я думаю, что я не очень хорошо объяснил это...

Другой: я могу сделать это за один день, могу ли я сделать это за весь год до сегодняшнего дня?

Я сделал еще одну таблицу с датой всего года и этим полем (дата, цена), я думаю, чтобы заполнить эту новую таблицу для нового запроса.


person user2964048    schedule 01.12.2013    source источник


Ответы (2)


Вы, вероятно, захотите сгруппировать по дням в году. Лучший способ сделать это примерно так:

SELECT id_order, price FROM orders WHERE 1 GROUP BY YEAR(`delivery`),
MONTH(`delivery`), DAY(`delivery`) ORDER BY `delivery`

Итак, если вы хотите получить сумму в день:

SELECT SUM(price) FROM orders WHERE 1 GROUP BY YEAR(`delivery`),
MONTH(`delivery`), DAY(`delivery`) ORDER BY `delivery`

Или, если вы хотите отформатировать результаты с датой, вы можете использовать date_format с %j для дня года (счет от 001 до 366) или отформатированной датой date_format с `%d-%m-%Y для формата, подобного 31-12-2013 (дд-мм-гггг)

SELECT SUM(price), DATE_FORMAT(`delivery`,'%j') as `dayoftheyear`, DATE_FORMAT(`delivery`,'%d-%m-%Y') as `date` FROM `orders` WHERE 1 GROUP BY YEAR(`delivery`), MONTH(`delivery`), DAY(`delivery`) ORDER BY `delivery`

Теперь вы можете просмотреть результаты с помощью $row55['dayoftheyear'] и $row55['date'] для дня года и отформатированного дня.

Или определите свой собственный формат на основе документации w3schools (для некоторых легче читать): http://www.w3schools.com/sql/func_date_format.asp или документы mysql: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

person Luceos    schedule 01.12.2013
comment
Спасибо, как я могу заполнить свою новую таблицу всеми ценами за каждый день? Эс. Я хочу это: 10-06-2013 | 324,00 | 06.11.2013 | 542.50 ecc... За все дни до сегодняшнего дня. - person user2964048; 01.12.2013
comment
Мой второй пример для суммы цен каждого дня. Но теперь вы хотите изменить всю раскладку стола? - person Luceos; 02.12.2013
comment
Да, мне нужно заполнить новую таблицу всеми днями 2013 года. раскладка: дни | days_total - person user2964048; 02.12.2013
comment
Вы хотите, чтобы days был днем ​​года или отформатированным днем: dd-mm-yy? - person Luceos; 02.12.2013

@luceos Не могли бы вы использовать функцию суммы?

НАПРИМЕР: ВЫБЕРИТЕ СУММУ(цена) как итог ИЗ заказов, ГДЕ 1 ГРУППА ПО ГОД(доставка), МЕСЯЦ(доставка), ДЕНЬ(доставка) ЗАКАЗАТЬ ПО доставке

person RossW    schedule 01.12.2013
comment
в вашей версии id_order больше не имеет смысла, потому что вы группируете. - person Luceos; 01.12.2013