Avatar billede big_ossi Nybegynder
26. januar 2009 - 08:00 Der er 21 kommentarer og
2 løsninger

Tæl antal indlæg i måneden ud fra unix timestamp

Hej

Har en database med hvor alle forum indlæg bliver gemt og vil gerne lave en statistik over hvor mange indlæg der er skrevet i hver måned men ved ikke om det kan lade sig gøre ud fra mit felt med unix timestamp som hvert indlæg har.

Ville gerne det kom til at se ud ala det her:

Jan: 232
Feb: 140
Mar: 290
Apr: 243
osv.

Er et til og gøre med en unix timestamp felt fra databasen?
Avatar billede showsource Seniormester
26. januar 2009 - 08:49 #1
jow da :O)

$sql = "SELECT
        COUNT(*) as antal,
        LEFT(FROM_UNIXTIME(feltnavn_med_tid, '%M'), 3) as maaned
        FROM
        tabel
        GROUP BY maaned";

Men der kommer vel flere år med tiden, så der skal jo nok være en WHERE på også ?
Avatar billede jakobdo Ekspert
26. januar 2009 - 09:17 #2
Hvorfor ikke bruge MONTH() ?
Avatar billede showsource Seniormester
26. januar 2009 - 09:21 #3
Fordi han ville ha' tre tegn, omend der jo så er en lille bøf med may
Avatar billede coderdk Praktikant
26. januar 2009 - 09:23 #4
SET lc_time_names = 'da_DK';

i MySQL, så burde den returnere danske navne ;)
Avatar billede coderdk Praktikant
26. januar 2009 - 09:25 #5
og så er LEFT vel ikke nødvendigt:

$sql = "SET lc_time_names = 'da_DK'";
mysql_query( $sql ) or die( mysql_error() );
$sql = "SELECT
        COUNT(*) as antal,
        FROM_UNIXTIME(feltnavn_med_tid, '%b') as maaned
        FROM
        tabel
        GROUP BY maaned";
Avatar billede showsource Seniormester
26. januar 2009 - 09:29 #6
ahh, lc_time_names kendte jeg ikke, og ja, LEFT er ikke nødvendig :O)
Avatar billede big_ossi Nybegynder
26. januar 2009 - 12:36 #7
Showsource> 3 tegn er ikke et krav men et forslag kommer an på hvad der giver mindst kode ;)

coderdk> har prøvet denne her og den viser intet i echo

$sql = "SET lc_time_names = 'da_DK'";
mysql_query( $sql ) or die( mysql_error() );
$sql = "SELECT
        COUNT(*) as antal,
        FROM_UNIXTIME(time, '%b') as maaned
        FROM
        news_log_2009
        GROUP BY maaned";
  $Count = mysql_result ($sql,0);
        echo $Count;
Avatar billede showsource Seniormester
26. januar 2009 - 12:50 #8
$Count = mysql_result ($sql,0,0).", ".mysql_result ($sql,0,1);
Avatar billede big_ossi Nybegynder
26. januar 2009 - 12:55 #9
Det giver et , i min echo
Avatar billede showsource Seniormester
26. januar 2009 - 12:57 #10
hmm, muligvis må der ikke være "space" før parentes?
$Count = mysql_result($sql,0,0).", ".mysql_result($sql,0,1);
Avatar billede big_ossi Nybegynder
26. januar 2009 - 12:59 #11
Det giver det samme
Avatar billede big_ossi Nybegynder
26. januar 2009 - 13:00 #12
Det ser sådan her ud

$sql = "SET lc_time_names = 'da_DK'";
mysql_query( $sql ) or die( mysql_error() );
$sql = "SELECT
        COUNT(*) as antal,
        FROM_UNIXTIME(time, '%b') as maaned
        FROM
        news_log_2009
        GROUP BY maaned";
  $Count = mysql_result($sql,0,0).", ".mysql_result($sql,0,1);
        echo $Count;
Avatar billede showsource Seniormester
26. januar 2009 - 13:04 #13
Hov, du skal jo lige udføre en query:

$sql = "SET lc_time_names = 'da_DK'";
mysql_query( $sql ) or die( mysql_error() );
$sql = "SELECT
        COUNT(*) as antal,
        FROM_UNIXTIME(time, '%b') as maaned
        FROM
        news_log_2009
        GROUP BY maaned";
  $docount = mysql_query($sql) or die (mysql_error());
  $Count = mysql_result($docount,0,0).", ".mysql_result($docount,0,1);

        echo $Count;
Avatar billede big_ossi Nybegynder
26. januar 2009 - 13:10 #14
jes nu får jeg 211, jan

Skal jeg så rette 0,1 til 0,2 for at få feb ? eller
Avatar billede showsource Seniormester
26. januar 2009 - 13:15 #15
første 0 er første "række" som query gi'r
andet nul er første "element", men her kan du også bruge feltnavnet, elelr som her "aliaset" som er lavet.
$Count = mysql_result($docount,0,0).", ".mysql_result($docount,0,1);
$Count = mysql_result($docount,0,"antal").", ".mysql_result($docount,0,"maaned");

Hvis du f.eks. VED at der er 12 raekker, kan du skrive mysql_result($docount,11,0)

men det er vel nemmere at lave en for-løkke til at løbe resultat igennem.
Eller bruge en while og mysql_fetch_assoc evt. mysql_fetch_object
Avatar billede showsource Seniormester
26. januar 2009 - 13:15 #16
Så dit spm. besvaret, nej du skal 1,0 og 1,1 for at få februar
Avatar billede big_ossi Nybegynder
26. januar 2009 - 13:24 #17
Hvordan skal det så se ud for at få et resultat som ser sådan ud:

Jan 211
Feb 0
Mar 0
osv
Avatar billede showsource Seniormester
26. januar 2009 - 13:31 #18
$docount = mysql_query($sql) or die (mysql_error());
$antal_ialt = mysql_num_rows($docount);

for løkke:

for($i = 0; $i < $antal_ialt; $i++) {
echo"<br />\r\n".mysql_result($docount,$i,"maaned").", ".mysql_result($docount,$i,"antal");
}


while:

while($r = mysql_fetch_object($docount)) {
echo"<br />\r\n".$r->maaned.", ".$r->antal;
}

En forløkke afvikles vist nok hurtigere end en while, men har nok ikke den store betydning lige her ?
Avatar billede big_ossi Nybegynder
26. januar 2009 - 13:40 #19
Takker det er lige det jeg havde brug for.
Hvis i lægger et svar får i points
Avatar billede showsource Seniormester
26. januar 2009 - 13:54 #20
ok, og ja, jeg er ikke den eneste! :O)
Avatar billede showsource Seniormester
26. januar 2009 - 13:54 #21
nåh
Avatar billede coderdk Praktikant
26. januar 2009 - 13:57 #22
:D showsource bør vel ha' de fleste :) jeg finpudsede bare lidt i starten
Avatar billede big_ossi Nybegynder
26. januar 2009 - 14:15 #23
Sådan ;) takker for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester