10. oktober 2003 - 00:58Der er
11 kommentarer og 1 løsning
Flere counts i en SELECT
Hej alle
Håber der er nogen, der kan hjælpe mig. Jeg har behov for SELECT-sætning, der indeholder flere counts på samme kolonne, men som er betinget er værdien i rækken.
Ud af denne ville jeg gerne lave én SELECT-sætning, der gav mig en komplet oversigt over hvor mange rækker der er totalt og hvor mange rækker, der i kollonnen VALUE indeholder henholdsvis værdierne 1, 2 og NULL.
Kan dette lade sig gøre?
Jeg har prøvet mange forskellige løsninger. Mit webhotel leverer MySQL 3.23.54 og så vidt jeg har fundet, så betyder det at jeg ikke kan gøre brug af JOINs, da det først er understøttet i version 4.0 (ved ikke om det er rigtigt).
Det kunne være rart, hvis man på en COUNT kunne sætte en WHERE-klausul i stil med dette:
SELECT COUNT(SELECT * FROM tabel WHERE VALUE = 1) AS Vaerdi1, COUNT(SELECT * FROM tabel WHERE VALUE = 2) AS Vaerdi2, COUNT(SELECT * FROM tabel WHERE VALUE = NULL) AS Vaerdi3, COUNT(*) AS Total FROM tabel;
Det ser kanon ud! Hvis jeg nu ønsker, at bearbejde værdien af count, hvor VALUE = 2, kan det så lade sig gøre? Lidt svært, at forklare, så her kommer et eksempel:
I øjeblikket udskriver ovenstående SELECT-sætning følgende værdier:
Null: 7 1: 158 2: 83
Det jeg så har behov for det er, at isolere f.eks. "1: 158". De andre værdier skal stadig kunne tilgås på samme måde længere nede på siden.
Betyder det ikke, at jeg så er nødt til at lave 3 forskellige SELECT-sætninger? Jeg ville helst kunne arbejde videre med værdierne i det recordset, der allerede er dannet, således at jeg kun skal i databasen 1 gang.
$id = array(); $res = mysql_query("SELECT VALUE, count(*) antal FROM tabel GROUP BY VALUE"); while ($row = mysql_fetch_array($res)) { $id[$row['VALUE']] = $row['antal']; }
Så lægger værdierne i $id[0], $id[1], $id[2], osv...
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.