Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица с двумя полями:
- date1 (тип DATETIME)
- counter1 (тип TINYINT UNSIGNED)
Известно, что для записи, с датой (днем недели) от понедельника 06:00:00 до пятницы 06:00:00 цена одной единицы поля counter1 равна 130 руб, а с пятницы 06:00:00 до понедельника 06:00:00 - 150р
Необходимо посчитать сумму всех записей (потом сделаю нужного временного интервала, это не сложно), исходя из вышеописанных условий подсчета.
Как сформировать такой MySQL запрос?
Версия MySQL: 5.1.58
Неактивен
Неактивен
Задача, по моему мнению, разбивается на 2 части:
1. Нахождение цены одного count-a в зависимости от даты. Спасибо за ссылки, я понял, что нужно использовать CASE.
2. Нахождение суммы произведений цены и значения поля count1.
Для моих мозгов структура очень сложная...
Неактивен
select sum(counter1*( case when dayofweek(now())=6 and time(now())>'06:00:00' then 150 when... else 130 end)) from `таблица`;
Неактивен
Спасибо, огромное!
Только одна тонкость.
Если бы цена зависела только от дня недели, то такое решение было бы самым верным:
$query = "SELECT SUM(counter*(CASE WHEN dayofweek(startdate)=1 THEN ".$mon_price." WHEN dayofweek(startdate)=2 THEN ".$tue_price." WHEN dayofweek(startdate)=3 THEN ".$wed_price." WHEN dayofweek(startdate)=4 THEN ".$thu_price." WHEN dayofweek(startdate)=5 THEN ".$fri_price." WHEN dayofweek(startdate)=6 THEN ".$sat_price." WHEN dayofweek(startdate)=7 THEN ".$sun_price." END)) FROM `stat_table` WHERE (startdate BETWEEN '2011-01-01 00:00:00' AND '2011-12-31 23:59:59')";
Но нужно считать не от 00:00:00, а 06:00:00, т.е. 6 часов утра.
Нельзя ли как нибудь в MySQL сделать dayofweek(startdate-$delta),
где $delta - будет равна 6 часам?
Отредактированно kostasoft (13.11.2011 01:01:07)
Неактивен
Думаю, здесь можно использовать конструкцию dayofweer(startdate - interval 1 hour)
Подробнее смотрите здесь.
Неактивен