[mysql & php] timstamp uitsplitsen naar datum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BKJ
  • Registratie: April 2000
  • Laatst online: 18-09 14:52
Ik heb een MySQL DB gevuld met members. In 1 van de kolommen staat een timestamp.
Bv: 1115742423. Dit komt overeen met een tijdstip op een bepaalde dag.

Nu wil ik graag per dag (en dus ook dagen in het verleden) weten hoeveel nieuwe members ik heb. Hoe doe ik dat?

Ik kan bv voor een x aantal dagen de begintimestamp en de eindtimestamp van die dagen berekenen en dan 1 voor 1 gaan kijken of er members zijn die in deze range vallen maar volgens mij is dat de slome en ietwat domme methode...

Iemand een beter idee?

Kamer huren


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:37

mulder

ik spuug op het trottoir

of je gebruikt een WHERE clause?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Verwijderd

SELECT COUNT(`id`) AS hoeveelheid_members FROM members GROUP BY DATE_FORMAT(`datefield`,'%Y-%m-%d')

[ Voor 16% gewijzigd door Verwijderd op 10-05-2005 17:03 ]


Acties:
  • 0 Henk 'm!

  • ecageman
  • Registratie: September 2001
  • Laatst online: 10-07 21:49
even uit mijn hoofd, kom ik op iets uit als:

select date_format(timestampveld, '%d-%m-%Y) as datum, count(*) from tabel group by datum;

Zoiets zal het zijn denk ik, kan een foutje in zitten.

[ Voor 12% gewijzigd door ecageman op 10-05-2005 17:05 . Reden: Was ik net iets langer bezig, damn! ]

AMD Athlon 2800+, MSI K7N2Delta-L, 1024MB PC3200, SB Audigy2, XFX GF4MX440, BenQ DVD+-RW, NEC 1300A DVD+-RW, 2x WD 120GB 8mb, 2x Maxtor 250GB, Chenbro Gaming Bomb, Tagan 480W, 17" Iiyama monitor


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Even voor de duidelijkheid: we hebben het over een UNIX timestamp, niet over een MySQL timestamp. Dat betekent dat er nog een extra conversie-slag in moet zitten naar een MySQL native date-formaat:

code:
1
SELECT FROM_UNIXTIME(1115742423)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

I.p.v. de query laten tellen kun je ook met PHP zelf werken;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

    // haal data op
    $query = "SELECT datumveld FROM tabelnaam ORDER BY datum DESC";
    $result = mysql_query($query);

    // init
    $dag = array();
    
    // loop door rijen
    while($row = mysql_fetch_assoc($result))
    {

        // nieuwe dag?
        if(!isset($datum) || $datum != date("d-m-Y", $row['datumveld']))
        {

            $datum = date("d-m-Y", $row['datumveld']);

        }

        // tellen maar - init
        if(!isset($dag[$datum])) $dag[$datum] = 0;

        // tellen maar
        $dag['datum']++;

    }

    // resultaat
    print_r($dag);

?>

Acties:
  • 0 Henk 'm!

  • ecageman
  • Registratie: September 2001
  • Laatst online: 10-07 21:49
Ik heb zo het gevoel dat de query het sneller doet dan de php oplossing, maar ik kan het mis hebben. Het scheelt in ieder wat regels code.

AMD Athlon 2800+, MSI K7N2Delta-L, 1024MB PC3200, SB Audigy2, XFX GF4MX440, BenQ DVD+-RW, NEC 1300A DVD+-RW, 2x WD 120GB 8mb, 2x Maxtor 250GB, Chenbro Gaming Bomb, Tagan 480W, 17" Iiyama monitor


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

ecageman schreef op dinsdag 10 mei 2005 @ 17:20:
Ik heb zo het gevoel dat de query het sneller doet dan de php oplossing, maar ik kan het mis hebben. Het scheelt in ieder wat regels code.
En minder fout gevoelig..

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • BKJ
  • Registratie: April 2000
  • Laatst online: 18-09 14:52
drm schreef op dinsdag 10 mei 2005 @ 17:10:
Even voor de duidelijkheid: we hebben het over een UNIX timestamp, niet over een MySQL timestamp. Dat betekent dat er nog een extra conversie-slag in moet zitten naar een MySQL native date-formaat:

code:
1
SELECT FROM_UNIXTIME(1115742423)
Maar hoe combineer je dat dan met de query die eerdergenoemd is? Hoe krijg je een waarde uit de DB tussen de haakjes?

Kamer huren


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

code:
1
DATE_FORMAT(FROM_UNIXTIME(veldnaam), '%d-%m-%Y')

Acties:
  • 0 Henk 'm!

  • BKJ
  • Registratie: April 2000
  • Laatst online: 18-09 14:52
Bedankt! Uiteindelijk heb ik dit:

code:
1
SELECT DATE_FORMAT(FROM_UNIXTIME(registered), '%d-%m-%Y') AS datum, COUNT(`userid`) AS hoeveelheid_members FROM users WHERE registered > 0 GROUP BY datum

Kamer huren

Pagina: 1