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 :: time вывод месяцев

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ATOM
Отправлено: 30 Октября, 2012 - 19:29:26
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




товарищи подскажите пожалуйста!
Имеем структуру базы date(в unix формате) и money(циферки).
нужно сделать такое условие, что бы выводить информации по месяцам, то есть за август выводит все значение money с 1.08.2012 по 1.09.2012, и так для каждого месяца.
написал такое
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE `date` >= {$date_ot} AND `date` <= {$date_do}
(возможно можно было применить between)
как сделать что бы само добавляло каждый месяц, надеюсь более менее понятно изъяснился
PHP:
скопировать код в буфер обмена
  1. function out_month () {
  2. $date_ot = "1347307200";
  3. $date_do = "1350504000";
  4. $temp = mysql_query("select * from money where `date` >= {$date_ot} and `date` <= {$date_do}");
  5. for ($i=0; $i<mysql_num_rows($temp); $i++){
  6. $temp_out = mysql_fetch_array($temp);
  7. echo $temp_out['money'] ."<br />";
  8. }
  9. }
  10. echo out_month();

(Добавление)
PHP:
скопировать код в буфер обмена
  1. function out_month () {
  2. $date_oct = "1349035200";//01.10.2012
  3. $date_nov = "1351717200";//01.11.2012
  4. $date_sep = "1346443200";//01.09.2012
  5. $temp = mysql_query("select * from money where `date` >= {$date_oct} and `date` <= {$date_nov}");
  6. $temp_count_oct = mysql_fetch_array(mysql_query("Select COUNT(*) as count from money where (`date` >= {$date_oct} and `date` <= {$date_nov})"));
  7. echo "за Октябрь ({$temp_count_oct['count']}) <br />";
  8. for ($i=0; $i<mysql_num_rows($temp); $i++){
  9. $temp_out = mysql_fetch_array($temp);
  10. echo $temp_out['money'] ."<br />";
  11. }
  12. $temp = mysql_query("select * from money where `date` >= {$date_sep} and `date` <= {$date_oct}");
  13. $temp_count_oct = mysql_fetch_array(mysql_query("Select COUNT(*) as count from money where (`date` >= {$date_sep} and `date` <= {$date_oct})"));
  14. echo "за сентябрь ({$temp_count_oct['count']}) <br />";
  15. for ($i=0; $i<mysql_num_rows($temp); $i++){
  16. $temp_out = mysql_fetch_array($temp);
  17. echo $temp_out['money'] ."<br />";
  18. }
  19. }
  20. echo out_month();

как этот процесс сделать автоматически ? что бы скрипт автоматом каждый месяц добавлял сам, август, сентябрь, октябрь, ноябрь

(Отредактировано автором: 30 Октября, 2012 - 19:33:53)

 
 Top
KingStar
Отправлено: 30 Октября, 2012 - 21:39:34
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` GROUP BY MONTH(FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s'))

(Добавление)
только вот немного недопонял

ATOM пишет:
то есть за август выводит все значение money с 1.08.2012 по 1.09.2012, и так для каждого месяца.

суммарно???

(Отредактировано автором: 30 Октября, 2012 - 21:40:16)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
ATOM
Отправлено: 30 Октября, 2012 - 22:01:12
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




KingStar пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` GROUP BY MONTH(FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s'))

(Добавление)
только вот немного недопонял

ATOM пишет:
то есть за август выводит все значение money с 1.08.2012 по 1.09.2012, и так для каждого месяца.

суммарно???

надо и суммарно, и каждую операцию выводить
 
 Top
KingStar
Отправлено: 30 Октября, 2012 - 22:06:11
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




а что не понятно??? идет группировка по месяцам, чтобы получить сумму полей `money` будет запрос таким

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT SUM(`money`) FROM `table` GROUP BY MONTH(FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s'))

(Добавление)
ATOM пишет:
надо и суммарно, и каждую операцию выводить


мне нужно было что-то подобное, дык вот чтобы не грузить тяжелым запросом, я для начала вывел все по месяцам, и аяксом по клику подгружал в таблицу все по кликнутому месяцу


-----
То что программа работает, не означает что она написана правильно!
 
 Top
ATOM
Отправлено: 30 Октября, 2012 - 22:15:23
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include 'db.php';
  4. function out_month(){
  5. $date_oct = "1349035200";//01.10.2012
  6. $date_nov = "1351717200";//01.11.2012
  7. $date_sep = "1346443200";//01.09.2012
  8. $temp = mysql_query("SELECT SUM(`money`) FROM `money` GROUP BY MONTH(FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s'))");
  9. $temp_count_oct = mysql_fetch_array(mysql_query("Select COUNT(*) as count from money where (`date` >= {$date_oct} and `date` <= {$date_nov})"));
  10. echo "за Октябрь ({$temp_count_oct['count']}) <br />";
  11. for ($i=0; $i<mysql_num_rows($temp); $i++){
  12. $temp_out = mysql_fetch_array($temp);
  13. echo $temp_out['money'] ."<br />";
  14. }
  15. //echo strtotime("01-09-2012");
  16. }
  17. echo out_month();
  18. ?>

вообще чё то не выдаёт
(Добавление)
спасибо уважаемый!
вот что получилось
PHP:
скопировать код в буфер обмена
  1. <?
  2. include 'db.php';
  3. function out_month(){
  4. $temp = mysql_query("SELECT date, round(SUM(`money`)) as \"money\" FROM `money` GROUP BY month(FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s'))");
  5. for ($i=0; $i<mysql_num_rows($temp); $i++){
  6. $temp_out = mysql_fetch_array($temp);
  7. echo strftime("%B", $temp_out['date']). " ";
  8. echo $temp_out['money'] . "$";
  9. echo "<br/>";
  10. }
  11. }
  12. echo out_month();
  13. ?>

как ещё сделать что бы после месяца выводило операции за текущий месяц?
 
 Top
KingStar
Отправлено: 30 Октября, 2012 - 22:34:14
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




я вешал на название месяца событие onclick, передавал аяксом месяц серверу, получал список согласно месяцу и подгружал в блок этого месяца ниже
(Добавление)
mysql_num_rows($temp); нужно вынести из цикла, и присвоить результат переменной, и в цикл использовать переменную, иначе же каждую итерацию будет делаться перерасчет, что абсолютно бессмысленно Хм


-----
То что программа работает, не означает что она написана правильно!
 
 Top
ATOM
Отправлено: 30 Октября, 2012 - 22:40:32
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




спасибо вам большое! вы мне очень помогли!
(Добавление)
вот что имеем
PHP:
скопировать код в буфер обмена
  1. <
  2. ?
  3. include 'db.php';
  4. function out_month(){
  5. $temp = mysql_query("SELECT date, round(SUM(`money`)) as \"money\" FROM `money` GROUP BY month(FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s'))");
  6. $do = mysql_num_rows($temp);
  7. for ($i=0; $i<$do; $i++){
  8. $temp_out = mysql_fetch_array($temp);
  9. $str_date = strftime("%B", $temp_out['date']);
  10. echo "<a class=\"blockmenu\" title=\"{$str_date}\" href=\"#\" onclick=\"ShowOrHide('{$str_date}');\">{$str_date}({$temp_out['money']} $)</a>
  11. <div id=\"{$str_date}\" style=\"display:none;\">";
  12. //if (strftime("%B", $temp_out['date'])=="October"){echo 'ee';}
  13. echo $temp_out['money'];
  14. echo "</div><br />";
  15. }
  16. }
  17. echo out_month();
  18. echo <<<HTML
  19. <script type="text/javascript">
  20. function ShowOrHide(id_name){
  21. var view = document.getElementById(id_name).style.display;
  22. if(view=='none')
  23. document.getElementById(id_name).style.display = 'block';
  24. else
  25. document.getElementById(id_name).style.display = 'none';
  26. }
  27. </script>
  28. HTML;
  29. ?>

как сделать так что бы после месяца выводило его операции? то есть спойлер открывается и показывает операции за текущий месяц
 
 Top
kappa
Отправлено: 30 Октября, 2012 - 23:24:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND FROM_UNIXTIME(`date`, '%Y-%m-%d %H:%i:%s')


За последний месяц можно и так:
CODE (SQL):
скопировать код в буфер обмена
  1.  BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE()

(Отредактировано автором: 30 Октября, 2012 - 23:28:37)

 
 Top
ATOM
Отправлено: 30 Октября, 2012 - 23:30:02
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




я имею ввиду что дописать в текущем коде, что бы после каждого месяца писало операции то есть цикл и данные выводить за каждый месяц
(Добавление)
как реализовать? в таком формате
месяц:
Данные 1
данные 2
Данные 3
месяц 2:
Данные 1
Данные 2
Данные 3
 
 Top
ATOM
Отправлено: 31 Октября, 2012 - 10:58:28
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?
  2. include 'db.php';
  3. function out_month(){
  4. $temp = mysql_query("SELECT date, round(SUM(`money`)) as \"money\" FROM `money` group by month(FROM_UNIXTIME(`date`, '%Y-%m-%d')) order by date desc");
  5. $do = mysql_num_rows($temp);
  6. for ($i=0; $i<$do; $i++){
  7. $temp_out = mysql_fetch_array($temp);
  8. $str_date = strftime("%B", $temp_out['date']);
  9. echo "<a class=\"blockmenu\" title=\"{$str_date}\" href=\"#\" onclick=\"ShowOrHide('{$str_date}');\">{$str_date}({$temp_out['money']} $)</a>
  10. <div id=\"{$str_date}\" style=\"display:none;\">";
  11. $date_go = $temp_out['date'] + 2678400;//сентябрь - октябрь. октябрь-ноябрь
  12. $t1 = mysql_query("Select * from `money` where `date` < {$date_go} and `date` > ". $temp_out['date'] ." order by date desc");
  13. echo '<table border ="1">';
  14. echo '<tr><td>Сумма:</td><td>Дата операции:</td><td>Комментарий:</td></tr>';
  15. for ($ig=0; $ig<mysql_num_rows($t1); $ig++){
  16. $t2 = mysql_fetch_array($t1);
  17. echo "<tr>";
  18. echo "<td>";
  19. echo $t2['money'];
  20. echo "</td>";
  21. echo "<td>";
  22. echo strftime("%d.%m.%Y", $t2['date']);
  23. echo "</td>";
  24. echo "<td>";
  25. echo $t2['comment'];
  26. echo "</td>";
  27. echo "</tr>";
  28. }
  29. echo "</table></div><br />";
  30. }
  31. }
  32. echo out_month();
  33. echo <<<HTML
  34. <script type="text/javascript">
  35. function ShowOrHide(id_name){
  36. var view = document.getElementById(id_name).style.display;
  37. if(view=='none')
  38. document.getElementById(id_name).style.display = 'block';
  39. else
  40. document.getElementById(id_name).style.display = 'none';
  41. }
  42. </script>
  43. HTML;
  44. ?>

реализовал, но выводит информацию как-то кривовато, к примеру в сентябре выводит какие то операции за октябрь к примеру. что в запросе не так? нужно сделать что бы выводило операции за каждый месяц то есть *.09.12 за сентябрь, и *.10.12 за октябрь
 
 Top
KingStar
Отправлено: 31 Октября, 2012 - 12:09:01
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)





CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `date`, `money` FROM `money` WHERE MONTH(FROM_UNIXTIME(`time`, '%Y-%m-%d')) = $month


-----
То что программа работает, не означает что она написана правильно!
 
 Top
ATOM
Отправлено: 31 Октября, 2012 - 12:35:27
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




уважаемый вот что конкретно интересует
PHP:
скопировать код в буфер обмена
  1.  
  2. $temp = mysql_query("SELECT date, min(`date`) as \"min\", max(`date`) as \"max\", round(SUM(`money`)) as \"money\" FROM `money` group by month(FROM_UNIXTIME(`date`, '%Y-%m-%d')) order by date desc");
  3. $do = mysql_num_rows($temp);
  4. for ($i=0; $i<$do; $i++){
  5. $temp_out = mysql_fetch_array($temp);
  6. $str_date = strftime("%B", $temp_out['date']);
  7. echo "<a class=\"blockmenu\" title=\"{$str_date}\" href=\"#\" onclick=\"ShowOrHide('{$str_date}');\">{$str_date}({$temp_out['money']} $)</a>
  8. <div id=\"{$str_date}\" style=\"display:none;\">";
  9. $date_go = $temp_out['date'] + 2678400;//сентябрь - октябрь. октябрь-ноябрь
  10. $min = $temp_out['min'] - 86400;
  11. $max = $temp_out['max'];
  12. $t1 = mysql_query("Select * from `money` where `date` >= ". $min ." and `date` <= ". $max ." order by date desc");

вот интересует конкретно вот что
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `money` WHERE `date` >= ". $min ." AND `date` <= ". $max ." ORDER BY date DESC

выводит октябрь и его операции все, потом выводит сентябрь и все его операции, но в сентябре последней операцией выводит минимальную операцию за октябрь, как исправить? что бы за сентябрь выводило только операции за сентябрь, за октябрь только за октябрь
(Добавление)
есть такое предположение как сделать условие типо такое:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM money WHERE date = месяц
  3.  

формат даты в unix формате

(Отредактировано автором: 31 Октября, 2012 - 12:36:31)

 
 Top
KingStar
Отправлено: 31 Октября, 2012 - 13:45:52
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




ATOM пишет:
есть такое предположение как сделать условие типо такое:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM money WHERE date = месяц
  3.  

формат даты в unix формате


я тебе и дал это решение


PHP:
скопировать код в буфер обмена
  1. $month = 8; // 8-й месяц, август

и дальше выборка согласно этому месяцу

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `date`, `money` FROM `money` WHERE MONTH(FROM_UNIXTIME(`time`, '%Y-%m-%d')) = $month


-----
То что программа работает, не означает что она написана правильно!
 
 Top
ATOM
Отправлено: 31 Октября, 2012 - 15:16:03
Post Id


Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




реализовал
PHP:
скопировать код в буфер обмена
  1. $month = strftime("%m", $temp_out['date']);
  2. $year = strftime("%Y", $temp_out['date']);
  3. echo "<br>";
  4. $do = strtotime(date("d-M-Y", mktime(23, 59, 59, $month+1, 1, $year)));
  5. $ot = strtotime(date("d-M-Y", mktime(0, 0, 0, $month, 0, $year)));
  6. $t1 = mysql_query("SELECT * FROM `money` WHERE `date` < ". $do ." and `date` > ". $ot. " order by date desc");
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB