Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите решить задачу по выборке
Дата пополнения Карточка Webmoney Терминал Счет ИТОГО
2010-07-01 18,00|6,00 15,00|5,00 13,00|3,00 0|0 36,00|14,00
2010-07-02 0|0 0|0 0|0 17,00|7,00
Применял запрос:
$query = "SELECT dtime, SUM(amount), SUM(bonus), method
FROM fn.fn_balance_in
WHERE TO_DAYS('2010-07-01') - TO_DAYS(dtime) <= 30
GROUP BY DATE_FORMAT(dtime, '%Y-%m-%d')";
$result = mysql_query($query); (Добавление)
что то мои таблицы, особенно вторую скосило...
сумма|бонус - к каждому методу платежа
duk
Отправлено: 02 Сентября, 2010 - 11:55:13
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Февр. 2010 Откуда: Москва
Помог: 3 раз(а)
фраза
GROUP BY DATE_FORMAT(dtime, '%Y-%m-%d')";
смысла не имеет. Группировать надо по полю, которое получится в результате выборки, например GROUP BY dtime
А вообще не понятно, как в хтмл могут быть такие поля ка терминал, если они все сольются в одно, группировка то идет по дате
phpself
Отправлено: 02 Сентября, 2010 - 12:01:48
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2010
Помог: 0 раз(а)
duk пишет:
фраза
GROUP BY DATE_FORMAT(dtime, '%Y-%m-%d')";
смысла не имеет. Группировать надо по полю, которое получится в результате выборки, например GROUP BY dtime
А вообще не понятно, как в хтмл могут быть такие поля ка терминал, если они все сольются в одно, группировка то идет по дате
Терминал - это тип платежа который в базе как метод = 3, по этому платежу нужно вывести за день общую сумму пополнений и бонусов, так же в этот день нужно включить суммы других типов. Я смог сделать только общий итоговый вывод, который, подсчитывает все суммы и бонусы за день. А как "разбросать" суммы по методам в один день ..?
Уже второй день пытаюсь это реализовать. поиск уже реально надоел, поэтому решил спросить на форуме.
WHERE TO_DAYS('2010-07-01') - TO_DAYS(dtime) <= 30
GROUP BY dtime, method";
этот код получит статистику по платежам с разбивкой по дате и методу
спасибо, уже лучше, но к сожалению не совсем то. Видимо дальше нужно заниматься обработкой в пыхе... (Добавление)
Больше мыслей нет как это можно сделать ? +)) прошу помощи
duk
Отправлено: 02 Сентября, 2010 - 12:59:49
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Февр. 2010 Откуда: Москва
Помог: 3 раз(а)
мыслей то полно, а вот что именно сделать - неясно
Просили по дням и методу - пжлста.
phpself
Отправлено: 02 Сентября, 2010 - 13:09:50
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2010
Помог: 0 раз(а)
duk пишет:
мыслей то полно, а вот что именно сделать - неясно
Просили по дням и методу - пжлста.
в том запросе который вы написали получается вывод:
было
2010-07-28 12,00|4.00 --- 11.00|5.00 --- 11.00|3.00
ваш запрос, который выше, почти подходит, за исключением повтора даты в разном методе.
уже много чего перепробовал. возможно из за того что голова забита этой проблемой, она не хочет думать =) Как говорится одна голова - хорошо, а две лучше =)
duk
Отправлено: 02 Сентября, 2010 - 13:36:03
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Февр. 2010 Откуда: Москва
$query="SELECT dtime, SUM(if(metod=1,amount,0)) as am_met_1, SUM(if(metod=1,bonus,0)) as bonus_met_1, SUM(if(metod=2,amount,0)) as am_met_2, SUM(if(metod=2,bonus,0)) as bonus_met_2
FROM fn.fn_balance_in
WHERE TO_DAYS('2010-07-01') - TO_DAYS(dtime) <= 30
GROUP BY dtime";
ну и так далее
phpself
Отправлено: 02 Сентября, 2010 - 13:54:15
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2010
$query="SELECT dtime, SUM(if(metod=1,amount,0)) as am_met_1, SUM(if(metod=1,bonus,0)) as bonus_met_1, SUM(if(metod=2,amount,0)) as am_met_2, SUM(if(metod=2,bonus,0)) as bonus_met_2
FROM fn.fn_balance_in
WHERE TO_DAYS('2010-07-01') - TO_DAYS(dtime) <= 30
GROUP BY dtime";
ну и так далее
скорей всего подошло =) нужно углубляться в сиквел =)
Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2010
Помог: 0 раз(а)
Задача усложнилась, чем ввели меня в ступор. Допустим в примере выше мы выбирали показывать данные за месяц с группировкой по дню. С 1-го по 19 и т.д. число дат нет потому что не было транзакций, как сделать так, что бы недостающие даты добавлялись с нулями ?
JustUserR
Отправлено: 02 Сентября, 2010 - 17:44:59
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
phpself пишет:
Как сделать так, что бы недостающие даты добавлялись с нулями ?
В большистве реализаций SQL имеется специальная функция которая позволяет осуществлять при выводе замену нулевых значений на заданее заданных объект определенного типа - это осуществляют функции типа IFNULL и ISNULL
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
phpself
Отправлено: 02 Сентября, 2010 - 23:18:46
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2010
Помог: 0 раз(а)
раскопал ф-ю которая генерит по заданному диапазону даты
как можно подставить свои значения с запроса mySQL(запрос выше от duk) напротив дат с фу-ии сравнивая даты. Если существует дата в БД то ставить значения ежели нет идем дальше и ставим нули. помогите в этой реализации
phpself
Отправлено: 02 Сентября, 2010 - 23:22:24
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2010
Помог: 0 раз(а)
для наглядности имг
нужно что бы допустим при выборе диапазона 2010-07-01 по 2010-07-31 отобразилась не только информация с БД но и даты до, после и между данными БД только с нулями так как операций не было в это время Прикреплено изображение (Нажмите для увеличения)
Покинул форум
Сообщений всего: 208
Дата рег-ции: Февр. 2010 Откуда: Москва
Помог: 3 раз(а)
вариантов видится три
1. создать отдельную таблицу с датами (365 записей), делать селект из 2 таблиц, с join
2. Изначально вставить в исходную таблицу (365*количество методов) пустых записей
3. Оставить все как есть и смотреть на отсутствие дат при выводе на страницу
я бы сделал третий
JustUserR
Отправлено: 03 Сентября, 2010 - 14:00:00
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
phpself пишет:
Нужно что бы допустим при выборе диапазона 2010-07-01 по 2010-07-31 отобразилась не только информация с БД но и даты до, после и между данными БД только с нулями так как операций не было в это время
Для того чтобы осуществить вывод нулевых значений в SQL-запросе можно использовать схемы с дополнительным вложенным запросом - в частности это может быть рефлексивное соединение таблицы или набор строковых констант для каждого дня года - в таком случае вы устанавливаете внешнее левое соединение по списку дат и получаете требуемые пустые значения
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.