mktime само месец и година

djpatzo

Registered
Здравейте в базата данни има записан часа като timestamp и искам при сравнение в страницата за извеждане да изведа всичко, което е от текущия месец, т.е. примерно да избера от SELECT BOX месец и от друг година и после при проверка в базата да изведа всички записи съответстващи на годината и месеца... И съответно да изведа после за всеки ден поотделно в таблица отдолу. Т.е. имам в базата примерно 1283353236 и 1283353034 тези 2 записа са от един ден в едно от полетата се въвежда сума примерно 20 и 25 искам тези 2-та записа, които са от 1 ден да се комбинират и съответно при извеждането да излезе в сумата 45 автоматично. Т.е. select-вам всички от 1 и същи ден от избрания месец и събирам полетата suma за да станат на едно и така 30 или 31 реда по дни

EDIT: Успях да изведа за текущия месец, но не мога да се справя да ги комбинирам по дни. Т.е. имам записи за целия месец на ден по няколко... Как да ги комбинирам тези няколко записа и да извежда за всеки ден сумирани записите по сума пари отбелязани...

Ето я заявката
Код:
$month = mktime(0, 0, 0, $_POST['month'], 1, $_POST['year']);
$nmonth = mktime(0, 0, 0, $_POST['month']+1, 1, $_POST['year']);

SELECT time, username, id, money FROM cash WHERE time >= $month AND time < $nmonth ORDER BY id ASC";
 
Ползвай си TIMESTAMP-а на MySQL, не UNIX-кия. После лесно можеш да направиш SELECT DATE(`data`) AS `data`, count(`id`) AS `broi` FROM `table` GROUP BY DATE(`data`)
 
Но идеята както казах е да се комбинират по дни. Не мога да ползвам timestamp на mysql Понеже ги имам записите и са около 40000 искам извеждането да си направя.
 
Има си функция FROM_UNIXTIME, можеш да я ползваш във всяка заявка или да си обработиш еднократно таблицата с нея (по-добрият вариант според мен - създаваш ново поле, пълниш го с данните от старото и ако всичко е 6 - триеш старото или пък може да си ги оставиш и 2те)
Ако искаш за точно определен месец добавяш Where:
ПП горе малко обърках заявката, ти искаше сума аз писах брой

SELECT DATE(`data`) AS `data`, sum(`money`) AS `suma` FROM `table` WHERE MONTH(`data`) = 5 AND YEAR(`data`) = 2010 GROUP BY DATE(`data`)
И ще ти изведе данни за май 2010 групирани по дата
 
Нищо не ми извежда, след като си промених с моите полета... А как се ползва FROM_UNIXTIME ясно, че на мястото на DATE ама пак не се получава.
 
вместо DATE(`poleto`) пишеш DATE(FROM_UNIXTIME(`poleto`))
или създаваш ново поле novadata например и пускаш тази заявка:
UPDATE `tablica` SET `novadata` = FROM_UNIXTIME(`poleto`)

пп ако искаш дай структурата и 10-15 записа да ти напиша заявката
 
SELECT DATE(FROM_UNIXTIME('cash.time')) AS `data`, sum('cash.money') AS `suma` FROM `cash` WHERE MONTH(`data`) = '8' AND YEAR(`data`) = '2010' GROUP BY data ORDER BY cash.id

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/rad/htdocs/modules/month_statement.php on line 70

Значи това се получава при 1-вия пример... С Print_r($query) изведох да видя какво се случва... Но после ми дава грешка
 
SELECT DATE(FROM_UNIXTIME('cash.time')) AS `data`, FROM_UNIXTIME('cash.time') AS `unix`, sum('cash.money') AS `suma` FROM `cash` WHERE MONTH(`unix`) = '8' AND YEAR(`unix`) = '2010' GROUP BY data ORDER BY cash.id

или така може би:
SELECT DATE(FROM_UNIXTIME('cash.time')) AS `data`, sum('cash.money') AS `suma` FROM `cash` WHERE FROM_UNIXTIME('cash.time', "%m %Y") = "5 2010" GROUP BY data ORDER BY cash.id
 
Код:
SELECT DATE(FROM_UNIXTIME('cash.time')) AS `data`, FROM_UNIXTIME('cash.time') AS `unix`, sum('cash.money') AS `suma` FROM `cash` WHERE MONTH(`unix`) = '8' AND YEAR(`unix`) = '2010' GROUP BY data ORDER BY cash.id

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/rad/htdocs/modules/month_statement.php on line 69

Между другото в базата записвам времето с time() при заявката
 
http://web-tourist.net/userfiles/2/2746.jpg
Ето виж как става с TIMESTAMP-а на MySQL
Само където има `date` трябва да го смениш със FROM_UNIXTIME(`cash.time`)
 
На мен в базата не са ми записани по този начин както е в дясно на изображението.. .При мен са с time() записани като timestamp...

Това ми е заявката с която успявам да изведа всичко от месеца, но не мога да го групирам по дни съответно с 30 реда и ми изкарва всичко примерно 200 записа за един ден с различни часове... С mktime си настройвам променливите $month и $nmonth за да изведа както трябва месеца, който съм избрал от SELECT BOX-а
Код:
$query = "SELECT cash.*, SUM(cash.money) as money, radcheck.value FROM cash,radcheck WHERE cash.time >= $month AND cash.time < $nmonth AND cash.username=radcheck.username AND radcheck.Attribute='Expiration' ORDER BY cash.id ASC";
 
ALTER TABLE `cash` ADD `newtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
UPDATE cash SET newtime = FROM_UNIXTIME(`time`);

Двете заявки в червено еднократно и после:

SELECT DATE(`newtime`) AS `data`, sum(`money`) AS `suma` FROM `cash` WHERE MONTH(`newtime`) = 8 AND YEAR(`newtime`) = 2010 GROUP BY `data` ORDER BY `id`
 

Back
Горе