PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Group by day
Postitaja: Keregevõhik 2011-09-15 14:25:12
panen igale andmebaasi salvestatud reale kaasa ka kuupäeva vormingus 21/08/2011 23:55:31. Oleks vaja read grupeerida päevade kaupa ja kuvada, mitu rida päevas on lisatud.
RE: Group by day
Postitaja: blaa 2011-09-15 15:03:29
kurat võtaks
sa oskad isegi märksõnad õigesti kirjutada, aga googlest pole kunagi kuulnud
http://lmgtfy.com/?q=Group+by+day

esimene tulemus annab kohe seda mis vaja
RE: Group by day
Postitaja: Zera 2011-09-15 15:13:32
SELECT date(aeg) as kuup, count(*) as kuup FROM minutabel group by kuup
"aeg" on siis selle välja nimi, kus on sinu kuupäev ja kellaaeg sees.

See muidugi eeldab, et su kuupäev on datetime vormingus, mitte tekstivormingus.
RE: Group by day
Postitaja: zera 2011-09-15 15:15:27
Väike näpukas tuli sisse, õige on see: SELECT date(aeg) as kuup, count(*) as kogus FROM minutabel group by kuup
RE: Group by day
Postitaja: Keregevõhik 2011-09-15 15:39:41
Viga oligi selles, et andmeväli oli varchar, mitte datetime. Sellepärast ka google vastused ei sobinud mulle. Ja seepärast siit küsisingi.


Muutsin asja dimestampiks. Kõik mu senised kuupäevad muutusid 0000-00-00 00:00:00. See selleks. Oleks vaja, et kuupäev oleks vormis d/m/Y H:i:s. Või kuidas oleks kõige õigem salvestada kuupäev andmebaasi
RE: Group by day
Postitaja: Keregevõhik 2011-09-15 15:40:15
TSITEERITUD:
Muutsin asja dimestampiks


datetimeks ikka :D
RE: Group by day
Postitaja: Grupitaja 2011-09-15 16:21:42
peaaegu pakuti õige vastus.
select blahh from blahh group by day(datetime)
RE: Group by day
Postitaja: ninnunännu 2011-09-15 16:35:01
TSITEERITUD:
Viga oligi selles, et andmeväli oli varchar, mitte datetime. Sellepärast ka google vastused ei sobinud mulle. Ja seepärast siit küsisingi.


Muutsin asja dimestampiks. Kõik mu senised kuupäevad muutusid 0000-00-00 00:00:00. See selleks. Oleks vaja, et kuupäev oleks vormis d/m/Y H:i:s. Või kuidas oleks kõige õigem salvestada kuupäev andmebaasi
Kuupäeva hoitakse formaadis YYYY-MM-DD. See tagab võimaluse andmeid sorteerida, grupeerida jne kõige lihtsamal moel. Samuti ajad sa segamini andmete hoidmise ja kuvamise, andeid tuleb hoida õiges formaadis ja kuvada sobilikus formaadis.
RE: Group by day
Postitaja: Kergevõhik 2011-09-15 16:38:59
Ok sain lõpuks tööle. Ainuke häda on see, see ei näite neid päevi, kui pole ühtegi sissekannet. Kuidas neid kuvada
RE: Group by day
Postitaja: Kergevõhik 2011-09-15 17:27:27
TSITEERITUD:
Ok sain lõpuks tööle. Ainuke häda on see, see ei näite neid päevi, kui pole ühtegi sissekannet. Kuidas neid kuvada


hetkel päring on selline:

PHP kood:
 $res mysql_query("SELECT date_format(date, '%d/%m/%Y') as kuup, count(id) as kogus FROM invoices group by kuup");

RE: Group by day
Postitaja: paul kerez 2011-09-15 18:15:27
TSITEERITUD:


hetkel päring on selline:

PHP kood:
 $res mysql_query("SELECT date_format(date, '%d/%m/%Y') as kuup, count(id) as kogus FROM invoices group by kuup");

vastus peitub küsimuse/probleemi tõstatamises, st. mida ikkagi tahetakse saada. kui malelaual on ainul 7 pitsi viina ja sa küsid select viin from malelaud, siis saadki vastukseks 7 pitsi viina vastavates ruutudes, sa ju ei küsinud malelaua kohta muud midagi, et mitu ruutu jne.
RE: Group by day
Postitaja: Kergevõhik 2011-09-15 19:49:22
Kindlasti on 100x parem variant ja kiirem jne aga siin on lahendus, mida mina kasutan:


PHP kood:
 $result mysql_query("SELECT date_format(date, '%Y-%m-%d') AS date FROM invoices ORDER BY id ASC LIMIT 1");
$first mysql_fetch_array($result);

$year date('Y'strtotime($first['date']));
$month date('m'strtotime($first['date']));
$day =  date('d'strtotime($first['date']));


for (
$i strtotime($year.'-'.$month.'-'.$day); $i strtotime('NOW'); $i=$i+24*60*60){
    
$r date('d/m/Y',$i);
    
$res mysql_query("SELECT DATE_FORMAT(date, '%d/%m/%Y') AS kuup, COUNT(id) AS kogus FROM invoices WHERE DATE_FORMAT(date, '%d/%m/%Y') LIKE '%$r%' GROUP BY kuup");
    
$arr mysql_fetch_array($res);
    
    if(
mysql_num_rows($res)){
        echo 
"".$arr['kuup']."&nbsp;=>&nbsp;".$arr['kogus']."<br>";
    }else{
        echo 
date('d/m/Y',$i)."=>&nbsp; 0<br>";
    }
}
RE: Group by day
Postitaja: näh 2011-09-16 07:37:32

PHP kood:
 
// Soovituslik on oma numberkonstandid välja arvutada,
// eriti kui sa kasutad neid tsüklis
define('ÖÖPÄEV'86400);

if (
$result mysql_query("SELECT date_format(date, '%Y-%m-%d') AS date FROM invoices ORDER BY id ASC LIMIT 1")) {
    
    
$first mysql_fetch_array($result);
    
$date date('Y-m-d'strtotime($first['date']));
    
    list(
$year$month$day) = preg_split('/-/'$date);
    
    
// $date on korra juba arvutatud
    // time() on ilmselt mõttekam siin
    // ÖÖPÄEV on konstant selmet 24*60*60
    
for ($i $date$i time(); $i += ÖÖPÄEV
    {
        
$r date('d/m/Y'$i);
        
$res mysql_query(
            
"SELECT DATE_FORMAT(date, '%d/%m/%Y') AS kuup, COUNT(id) AS kogus"
            
"FROM invoices " 
            
"WHERE DATE_FORMAT(date, '%d/%m/%Y') "  
            
"LIKE '%$r%' "
            
"GROUP BY kuup");
            
        if (
false !== $res) {
            
$arr mysql_fetch_array($res);
            
            if (
mysql_num_rows($res)) {
                echo 
$arr['kuup'] . " => " $arr['kogus'] . "<br />";
            } else {
                
// sest tsükli alguses on avaldis:
                // $r = date('d/m/Y', $i);
                // miks sa seda ei kasuta?
                
echo $r "=>&nbsp; 0<br>";
            }
        } else {
            
// $res pole ressurss vaid boolean false
            // mis nüüd?
        
}
    } 
// endfor
} else {
    
// !resource || false
    // mis nüüd?
}
RE: Group by day
Postitaja: näh 2011-09-16 07:41:41
Kuna ma ei testinud, siis jätsin "bug"-i sisse. $date on ju 'string' ja seega ei kannata seda for-tsüklis integraaliga võrrelda.
RE: Group by day
Postitaja: blaa 2011-09-16 10:39:55
päris põnev, kuidas lihtsat ülesannet venitatakse pikaks ja vigaseks

väike hoiatus, ööpäeva pikkus ei ole alati 86400 sekundit
RE: Group by day
Postitaja: näh 2011-09-16 18:20:15
Sa võid ju kella krudida edasi-tagasi, aga timestamp jookseb ikka omasoodu.
RE: Group by day
Postitaja: Kergevõhik 2011-09-16 20:54:09
TSITEERITUD:
päris põnev, kuidas lihtsat ülesannet venitatakse pikaks ja vigaseks

väike hoiatus, ööpäeva pikkus ei ole alati 86400 sekundit


Hetkel sobib see lahendus kyll. Aga sa ju võid aidata parandada
RE: Group by day
Postitaja: blaa 2011-09-17 01:11:14
TSITEERITUD:
Sa võid ju kella krudida edasi-tagasi, aga timestamp jookseb ikka omasoodu.

Soovitan sul sellesse koodi süveneda ja analüüsida väljundit. Kui aru saad, siis looedetavasti ei kasuta enam kunagi ajatemplile päeva liitmiseks konstanti 86400, sest kaks korda aastas ei ole see lihtsalt õige arv.

PHP kood:
<?php

$first
['date'] = '2011-10-28';

$NOW strtotime($first['date'].' +6 days');

$year date('Y'strtotime($first['date']));
$month date('m'strtotime($first['date']));
$day =  date('d'strtotime($first['date']));

for (
$i strtotime($year.'-'.$month.'-'.$day); $i $NOW/*strtotime('NOW')*/$i=$i+24*60*60)
{
    
$r date('d/m/Y'$i);
    echo 
$r.'<br />';
}

/*
28/10/2011
29/10/2011
30/10/2011
30/10/2011 ?!
31/10/2011
01/11/2011
02/11/2011
*/

?>
RE: Group by day
Postitaja: noh 2011-09-17 06:26:25
Ma olen alati öelnud, et kella keeramine on täiesti mõtetu tegevus
RE: Group by day
Postitaja: blaa 2011-09-17 11:25:42
Poleks hullu, kui kogu maailm keeraks samadel kuupäevadel ja sama palju.
Kella keeramine on lihtsam ja valutum, kui see, et kõik ettevõtted hakkavad oma lahtioleku aegu muutma. Elektri säästmiseks on vajalik üks või teine liigutus teha.

aegadega manipuleerimiseks kasutage strtotime funktsiooni näiteks koos '+X days', '+X hours' lipukestega

$i = 0;
$t = strtotime('+'.$i.'days');
for (; $i < 10; $t = strtotime('+'.++$i.'days'))
echo date('d.m.Y', $t);

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.102371931076