За последние 24 часа нас посетили 51814 программистов и 1756 роботов. Сейчас ищут 1689 программистов ...

Подсчет суммы за день.

Тема в разделе "PHP для новичков", создана пользователем Salvat, 24 мар 2016.

  1. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Здравствуйте. Подскажите, пожалуйста, почему сумма считается неверно?
    Код (PHP):
    1.   $transfer_sum_day = array_sum(mysql_fetch_array(mysql_query("SELECT `price` FROM `payment_history` WHERE `date_payment`>NOW()-INTERVAL 24 HOUR"))); 
    Я понимаю, что можно вывести все через цикл и подсчитать, но это будут 4 строчки кода, охота оптимизации в одной строке чтобы был подсчет.
    SUM у меня почему-то не работает.
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    а как у тебя запрос выглядит вместе с SUM??? ((:)
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну так что возвращает mysql_fetch_array ? 1 строку выборки, а вы хотите сразу все просуммировать. Тогда уже задайте суммирование прямо в запросе:
    Код (PHP):
    1. SELECT sum(`price`) FROM `payment_history` WHERE `date_payment`>NOW()-INTERVAL 24 HOUR
    И переходите с устаревшего расширения mysql на mysqli (там можно продолжать писать процедурным стилем, если что, без ООП) или PDO.
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    mkramer, не дал челу подумать даже ((:) И раз уж такие пляски то лучше будет так тогда для него
    Код (PHP):
    1. SELECT sum(`price`) `summ` FROM `payment_history` WHERE `date_payment`>NOW()-INTERVAL 24 HOUR
     
  5. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Код (PHP):
    1. $transfer_sum_day =  mysql_result(mysql_query("SELECT SUM(`price`) FROM `payment_history` WHERE `date_payment`>NOW()-INTERVAL 24 HOUR"));
    2.  
    Две строчки по 5,5 Должно быть две строчки, одна 1000 другая 5.
    Почитаю, перейду, благодарю за совет.
    Откуда Вы `summ` не понимаю, у меня такого нигде нет.
     
  6. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    это магия для тебя ((:) Завардампишь - увидишь (;
     
  7. Andrey_mdev

    Andrey_mdev Новичок

    С нами с:
    11 мар 2016
    Сообщения:
    24
    Симпатии:
    0
    Странное условие
    Код (PHP):
    1. `date_payment`>NOW()-INTERVAL 24 HOUR
    Такое ощущение, что ваш запрос правильно может работать только если его запускать в 12 часов ночи
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Salvat, однозначно тебе нужна майсиквельная функция sum(). Лично мне непонятно почему:
    1. ты используешь имя `price`, а ведь price переводится как "цена"! цену не суммируют. суммируют стоимость, которая обычно
      amount = price * quantity
      ты случайно не ошибся с колонкой? может от того и результат не соответствует ожиданиям.
    2. ты почему-то ожидаешь две строки. если тебе надо итог, почему две а не одна?! объясни.
    3. см. сомнения Andrey_mdev

    Andrey_mdev, странные у тебя ощущения. это работает всегда, НО в зависимости от типа `date_payment` это означает:
    • DATE: платежи за сегодняшний день (по времени сервера)
    • DATETIME: платежи за последние 24 часа
    что имел в виду автор, он может и сам не знать :)
     
  9. Andrey_mdev

    Andrey_mdev Новичок

    С нами с:
    11 мар 2016
    Сообщения:
    24
    Симпатии:
    0
    Я рассуждал так: Название темы "Подсчет суммы за день". А этот запрос будет выводить все сегодняшние платежи и к ним добавлять часть вчерашних. Если конечно этот запрос не выполнять в 23:59:59
    Ну или INTERVAL 24 HOUR это умная конструкция, которая сама отделит новые сутки от прошлых? Я просто не использовал ее.
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    …рассуждения о математической верности выпилены…

    В общем случае фраза "за день" неоднозначна. Это 24 часа от одной получночи до другой или это произвольные 24 часа? — зависит от контекста.

    ТС в своём запросе использовал выражение на SQL "за последние 24 часа", таким образом контекст обозначен, я считаю. Но возможен побочный эффект если тип DATE, я об этом написал выше.