mboost-dp1
Hjælp til noget simpelt mysql
- Forside
- ⟨
- Forum
- ⟨
- Support
Dette er et eksempel:
Hvis jeg i en mysql database skriver:
SELECT count(name) FROM payment WHERE date like "2003%" && status != betalt;
Får jeg antallet af names i payment fra 2003 hvor status IKKE er betalt.
hvis jeg vil have det for en enkelt måned (januar her), skrive jeg:
SELECT count(name) FROM payment WHERE date like "2003-01%" && status != betalt;
februar:
SELECT count(name) FROM payment WHERE date like "2003-02%" && status != betalt;
OSV.
Kan jeg gøre, så jeg får vist alle 12 mdr for 2003, ved at skrive en enkelt kommande/streng, i stedet for at skulle skrive en for hver måned? Har læst noget om GROUP eller GROUP BY, men ved ikke hvordan jeg skal få det til at virke.
Nogen der kan forstå hvad det er jeg vil?
På forhånd tak.
Hvis jeg i en mysql database skriver:
SELECT count(name) FROM payment WHERE date like "2003%" && status != betalt;
Får jeg antallet af names i payment fra 2003 hvor status IKKE er betalt.
hvis jeg vil have det for en enkelt måned (januar her), skrive jeg:
SELECT count(name) FROM payment WHERE date like "2003-01%" && status != betalt;
februar:
SELECT count(name) FROM payment WHERE date like "2003-02%" && status != betalt;
OSV.
Kan jeg gøre, så jeg får vist alle 12 mdr for 2003, ved at skrive en enkelt kommande/streng, i stedet for at skulle skrive en for hver måned? Har læst noget om GROUP eller GROUP BY, men ved ikke hvordan jeg skal få det til at virke.
Nogen der kan forstå hvad det er jeg vil?
På forhånd tak.
Det er korrekte at du kan bruge GROUP BY, dog ved jeg ikke om man kan formatere det videre, da du jo ikke har en kolonne der hedder måned, men har hele din dato samlet.
Så hvis du bruger GROUP BY date så vil den jo vise dem per unikke felt i din date kolonne (som sikkert er per dag?).
Det du kan gøre er at formatere date kolonnen i din select. Nu er jeg ikke ligefrem en ekspert og kan ikke teste det selv, men tror at du kan gøre det med noget i retning af:
SELECT count(name), LEFT(date, 7) As month FROM payment GROUP BY month HAVING status != betalt;
Left funktionen tager de 7 første tegn fra venstre (så vidt jeg har forstået), men ellers må du kigge lidt på nogle af MySQL's andre funktioner hvis mit eksempel ikke virker. Men håber ihvertfald at mit eksempel kan give dig et hint :)
Så hvis du bruger GROUP BY date så vil den jo vise dem per unikke felt i din date kolonne (som sikkert er per dag?).
Det du kan gøre er at formatere date kolonnen i din select. Nu er jeg ikke ligefrem en ekspert og kan ikke teste det selv, men tror at du kan gøre det med noget i retning af:
SELECT count(name), LEFT(date, 7) As month FROM payment GROUP BY month HAVING status != betalt;
Left funktionen tager de 7 første tegn fra venstre (så vidt jeg har forstået), men ellers må du kigge lidt på nogle af MySQL's andre funktioner hvis mit eksempel ikke virker. Men håber ihvertfald at mit eksempel kan give dig et hint :)
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.