WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Datum i MySQL (https://www.wn.se/forum/showthread.php?t=5859)

etanders 2005-02-01 16:26

Jag har en kolumn med datum i en databas (MySQL). Kolumnen är av typen DATETIME och värdena har alltså formen 'YYYY-MM-DD HH:MM:SS'. Nu skulle jag vilja räkna hur många rader som har ett visst datum, alltså oberoende av klockslaget. Vilket är bästa sättet?

Ska man använda WHERE och ange värden som ligger mellan t.ex. 2005-02-01 00:00:00 och 2005-02-01 23:59:59? Finns det någon färdig syntax i MySQL? En annan variant är ju att läsa in alla rader i php och där gruppera och summera.

Kanske ska tillägga att jag som resultat vill få presenterat en lista över alla dagar (från ett visst datum till dagens datum) och hur många poster i databasen som har resp. datum (oavsett klockslag). Jag borde inte vara den första som funderat på detta...

mypay 2005-02-01 17:30

select * from MyTable where datum LIKE '2005-02-01%'

LIKE är en wildcard funktion och wildcard-tecknet är då %

etanders 2005-02-01 18:01

Tack, det var ju enkelt. Då är det bara att göra en loop i php-skriptet från startdatumet till dagens datum och skicka en sql-fråga för varje datum. I mitt fall rör det sig då om max 150 frågor, så det borde fungera bra utan att det blir segt.

Men finns det något sätt att låta databasmotorn göra så mycket som möjligt av jobbet? Dvs formulera frågan så att svaret blir en kolumn med datum och en kolumn med antal poster. Förtydligar mig för säkerhets skull:

Om tabellen ser ut ungefär så här...
Kod:

datum            text
2005-01-20 14:25:00  "dummy value"
2005-01-20 21:03:18  "dummy value"
2005-01-21 08:07:30  "dummy value"
2005-01-23 12:00:47  "dummy value"
2005-01-23 16:26:01  "dummy value"
2005-01-23 22:56:17  "dummy value"

...så vill jag ha följande resultat:
Kod:

datum    antal
2005-01-20  2
2005-01-21  1
2005-01-22  0
2005-01-23  3

0-raden kanske är överkurs, men är det andra möjligt med en sql-fråga?

eg0master 2005-02-01 18:42

Självklart går det med en fråga:
Kod:

select LEFT(date_column,10) as mydate, count(*)
from mytable
group by mydate



Alla tider är GMT +2. Klockan är nu 11:05.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson