03. august 2005 - 12:47Der er
9 kommentarer og 1 løsning
Hjælp til et group by statement
Hej Eksperter
Jeg laver en projekt-database hvor jeg gerne vil udtrække en liste der viser en liste over projekter sorteret efter navnet på personen der har dem, samt hvor mange projekter han har ude, og hvor mange af disse der er åbne og lukkede.
Felterne i databasen er:
id - projectdesc - date - person - active
Hvor person er personen der har projektet og active enten er 1 eller 0, alt efter om projektet er åbnet eller lukket.
Listen jeg ønsker skal se således ud:
Person Projects Open Closed John Doe 5 projects 2 3
Jeg kan godt få listet personen og antallet af projekter ved: SELECT person, COUNT(person) as projects FROM ".$table." GROUP BY projects ORDER BY person DESC
Men hvordan får jeg de to sidste kolonner ind? Det må være noget med et join..
SELECT person, COUNT(person) as projects, (SELECT COUNT(*) FROM tabel t1 WHERE t1.person=t.person AND t1.active=1), (SELECT COUNT(*) FROM tabel t2 WHERE t2.person=t.person AND t2.active=0) FROM tabel t GROUP BY t.projects ORDER BY t.person DESC
4.1 gør, under der gør ikke. Og jeg har pt ikke en >4.1 tilgængelig :\ De kan omskrives med nogle joins, dog, har jeg læst - hvis du vil komme med et forslag til hvordan er du mere end velkommen.
Altså, hvis projekt-tabellen indeholder, om projektet er aktivt, og du skal have en liste over personer, antal projekter (som personen står for) og hvor mange åbne og lukkede heraf, så er det da bare:
SELECT person, COUNT(1) as projects, SUM(IF(active=1,1,0)) AS open, SUM(IF(active=0,1,0)) AS closed FROM tabel GROUP BY person ORDER BY person DESC
Men nu skriver du i din beskrivelse, at det er en liste over projekter - og ovenstående er jo nærmere at betragte som en liste over projekt-ejere, for du kan jo ikke se de enkelte projekter.
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.