Hallå!
Går följande att göra och hur gör man isf:
Jag har en tabell med id och ett timestamp på medlemmar. Jag skulle vilja räkna hur många medlemmar per dag som registeras. Alltså söka på intervallen mellan timestampsen.
// Nippe
17 svar · 259 visningar · startad av nkrantz
Hallå!
Går följande att göra och hur gör man isf:
Jag har en tabell med id och ett timestamp på medlemmar. Jag skulle vilja räkna hur många medlemmar per dag som registeras. Alltså söka på intervallen mellan timestampsen.
// Nippe
Vad använder du för DBMS?
mySQL... timstampet är sparat som UNIXtimestamp...
Nu vet jag inte hur man formaterar DATE i MySQL, men det här fungerar bra i Access, så du kanske kan lösa formateringen själv?
SELECT Count(*)
FROM tabell
GROUP BY FormatDateTime(timestamp)
red. Jag hittade inget format i MySQL som heter UNIXTimestamp. Endast olika Timestamp. Timestamp(14) t.ex..
Funktionen heter FROM_UNIXTIMESTAMP() i MySQL.
Testa:
SELET COUNT(*)
FROM tabell
GROUP BY FROM_UNIXTIMESTAMP(tabell.field, "%Y %M %D");
SELECT COUNT(payment_id)
FROM tbl_payment
GROUP BY FROM_UNIXTIMESTAMP(tbl_payment.timestamp, "%Y %M %D");
Funkar inte, får inte heller något felmeddelande!
Vad kan detta bero på?
// Nippe
Får du ett 0-värde eller ingen utskrift alls?
Alltså, jag menar, jag får ett felmeddelande, men inget meddelande.. hm.. Så här menar jag (från phpMyAdmin)
Error
SQL-query:
SELECT COUNT(*)
FROM tbl_payment
GROUP BY FROM_UNIXTIME(tbl_payment.timestamp, "%Y %M %D");
MySQL said:
Å så säger MySQL inget.. lite dumt tycker jag!
// Nippe
sorry... mitt fel.. så här menar jag att det blir:
Error
SQL-query:
SELECT COUNT(payment_id)
FROM tbl_payment
GROUP BY FROM_UNIXTIMESTAMP(tbl_payment.timestamp, "%Y %M %D");
MySQL said: You have an error in your SQL syntax near '(tbl_payment.timestamp, "%Y %M %D")' at line 3
Ett nytt försök då, först konverterar vi ditt fält till typen DATE och gör sedan en DATE_FORMAT:
SELECT COUNT(payment_id)
FROM tbl_payment
GROUP BY DATE_FORMAT( CAST( tbl_payment.timestamp AS DATE ), "%Y %M %D" );
Eh.. Kom på att fältet är egentligen ett varchar fält där ett timestampen sparas från PHP, kanske kan vara detta som är problemet?
Ja, jag skrev fel förut. Det finns ingen FROM_UNIXTIMESTAMP, den heter FROM_UNIXTIME som du tydligen hade märkt enligt inlägget innan. :)
Aha! Testa då med mitt CAST-exempel om fältet är VARCHAR.
Nä du...
Error
SQL-query:
SELECT COUNT(payment_id)
FROM tbl_payment
GROUP BY DATE_FORMAT( CAST( tbl_payment.timestamp AS DATE ), "%Y %M %D" );
MySQL said: You have an error in your SQL syntax near '( tbl_payment.timestamp AS DATE ), "%Y %M %D" )' at line 3
Då verkar det som att du använder en lite äldre MySQL-version? CAST ska vara tillgängligt f.o.m. 4.0.2.
Jag är tom på fler idéer, tyvärr.
Ah... Då var det där problemet låg :( Kör MySQL 3.23.33...
Tack ändå för ditt engagemang ;) Får bygga någon funktion i PHP istället, så vi syns säkert i det forumet istället ;)
// Nippe
Har du inga möjligheter att uppgradera MySQL? Det skulle väl vara den bästa lösningen och en varm rekomendation.
FROM_UNIXTIME verkar ju annars fungera med 3.23.33:an:
SELECT COUNT( tbl_payment.payment_id )
FROM tbl_payment
GROUP BY FROM_UNIXTIME( TIMESTAMP( tbl_payment.timestamp ), "%Y %M %D" );
Konverterar först till ett TIMESTAMP-värde och kör sedan funktionen FROM_UNIXTIME.
Red.} Doh, TIMESTAMP-funktionen däremot är från 4.1.1... Du får göra det i PHP då, syns där. ;)