Avatar billede michaelgm Nybegynder
11. november 2007 - 11:03 Der er 6 kommentarer og
1 løsning

count() med betingelse

SELECT
modulunder.id,
modulunder.undermodule,
modul.module,
modulhovede.hovedemodule,
modulunder.link,
modulunder.ikon,
(SELECT count(modul.module) FROM modul WHERE modul.hovedemoduleid = modulhovede.id) as antalmoduler,
(SELECT count(modulunder.undermodule) FROM modulunder WHERE modulunder.moduleid = modul.id) as antalundermoduler
FROM
modultilladelser
Join modulunder ON modultilladelser.modulunderid = modulunder.id
Join modul ON modulunder.moduleid = modul.id
Join modulhovede ON modul.hovedemoduleid = modulhovede.id
WHERE
modultilladelser.brugerid =  '$_SESSION[brugerid]'
ORDER BY
modulhovede.hovedemodule ASC,
modul.module ASC,
modulunder.undermodule ASC

Nu har jeg siddet de sidste par timer og prøvet at få denne linie til at fungere

(SELECT count(modul.module) FROM modul WHERE modul.hovedemoduleid = modulhovede.id) as antalmoduler,

Jeg kan ikke få den til kun at tælle dem hvor brugerid = '$_SESSION[brugerid]' den tager og udskriver alle..

Håber der er nogen der kan hjælpe
Avatar billede kjulius Novice
11. november 2007 - 18:24 #1
Umiddelbart ville jeg mene, at du med fordel kunne bruge en COUNT DISTINCT i stedet for en subselect. Noget lign. dette (ikke testet):

SELECT mu.id, mu.undermodule,m.module,mh.hovedemodule,mu.link,mu.ikon,COUNT(DISTINCT m.id) AS antalmoduler, COUNT(DISTINCT um.id) AS antalundermoduler
FROM modultilladelser mt
INNER JOIN modulunder mu ON mt.modulunderid = mu.id
INNER JOIN modul m ON mu.moduleid = m.id
INNER JOIN modulhovede mh ON m.hovedemoduleid = mh.id
WHERE mt.brugerid =  '$_SESSION[brugerid]'
ORDER BY mh.hovedemodule, m.module, mu.undermodule
Avatar billede michaelgm Nybegynder
12. november 2007 - 10:13 #2
Jeg får denne vej:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Avatar billede michaelgm Nybegynder
12. november 2007 - 11:18 #3
fejl selvfølgelig. Det gik vist lidt for hurtigt med at få sendt den afsted.
Avatar billede michaelgm Nybegynder
12. november 2007 - 18:31 #4
Kunne ikke få det til at virke så jeg lavede det med subselect:
                    SELECT mu.id, mu.undermodule,m.module,mh.hovedemodule,mu.link,mu.ikon,
                    (SELECT count(DISTINCT m.module) FROM modul m join modulunder mu on m.id = mu.moduleid join modultilladelser mt on mu.id = mt.modulunderid WHERE m.hovedemoduleid = mh.id and mt.brugerid='$_SESSION[brugerid]') as antalmoduler,
                    (SELECT count(DISTINCT mu.undermodule) FROM modulunder mu join modultilladelser mt on mu.id = mt.modulunderid WHERE mu.moduleid = m.id AND mt.brugerid='$_SESSION[brugerid]') as antalundermoduler
                    FROM modultilladelser mt
                    INNER JOIN modulunder mu ON mt.modulunderid = mu.id
                    INNER JOIN modul m ON mu.moduleid = m.id
                    INNER JOIN modulhovede mh ON m.hovedemoduleid = mh.id
                    WHERE mt.brugerid =  '$_SESSION[brugerid]'
                    ORDER BY mh.hovedemodule, m.module, mu.undermodule


Hvis nogen har en bedre måde og gøre det på vil jeg selvfølgelig stadig gerne høre det.
Avatar billede kjulius Novice
12. november 2007 - 21:28 #5
Prøvede du at indsætte en GROUP BY?

Ca. sådan:

SELECT mu.id, mu.undermodule,m.module,mh.hovedemodule,mu.link,mu.ikon,COUNT(DISTINCT m.id) AS antalmoduler, COUNT(DISTINCT um.id) AS antalundermoduler
FROM modultilladelser mt
INNER JOIN modulunder mu ON mt.modulunderid = mu.id
INNER JOIN modul m ON mu.moduleid = m.id
INNER JOIN modulhovede mh ON m.hovedemoduleid = mh.id
WHERE mt.brugerid =  '$_SESSION[brugerid]'
GROUP BY mu.id, mu.undermodule,m.module,mh.hovedemodule,mu.link,mu.ikon
ORDER BY mh.hovedemodule, m.module, mu.undermodule
Avatar billede kjulius Novice
12. november 2007 - 21:56 #6
Nå nej, glem det. Det vil vist ved nærmere eftertanke ikke virke med alle de felter i GROUP BY.
Avatar billede michaelgm Nybegynder
16. november 2007 - 08:16 #7
Så vil jeg lukke spørgsmålet igen. Tak fordi du gav dig tid.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester