11. november 2007 - 11:03Der 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..
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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
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.
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
Så vil jeg lukke spørgsmålet igen. Tak fordi du gav dig tid.
Synes godt om
Ny brugerNybegynder
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.