We hebben een media bibliotheek. Deze bibliotheek bevat directories en mediabestanden. Een mediabestand zit in een directory. Een directory heeft een parentID als het niet de rootmap is, en een parentID van 0 als het wel de rootmap is.
De database structuur is als volgt:
De eerste directory is "root" met dirID = 1 en parentID = 0. In de database staan verder geen items met parentID 0.
Wat wil ik nu zien? Ik wil van een bepaalde directory zien welke subdirectories hij heeft, en van elke subdirectory wil ik weten hoeveel subdirectiries die weer bevat en hoeveel mediabestanden hij heeft.
Dat doe ik met de volgende query:
Nu krijg ik netjes alle results terug. Alles prima. Behalve als ik alle subdirectories van de root dir wil bekijken. Dan moet ik dus alle directories ophalen die parentID = 1 hebben. Dan geeft hij voor zowel de directories als het aantal files een raar getal terug: subdircount * 3. Dus heb ik 2 files en 3 subdirectories, krijg ik toch allebei 9 terug. Als ik nu een van de 2 joins + count (maakt niet uit welke) weghaal, haalt hij de resterende gegevens wel goed op.
Het vreemde is hier nu dat het in alle gevallen goed gaat, behalve in de root dir.
update: Hij telt blijkbaar altijd verkeerd, niet alleen bij de root.
Iemand een idee?
De database structuur is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
| CREATE TABLE `media_dir` ( `dirID` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_bin NOT NULL default '', `parentID` int(11) NOT NULL default '0' ); CREATE TABLE `media` ( `mediaID` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_bin NOT NULL default '', `dirID` int(11) NOT NULL default '0' ); |
De eerste directory is "root" met dirID = 1 en parentID = 0. In de database staan verder geen items met parentID 0.
Wat wil ik nu zien? Ik wil van een bepaalde directory zien welke subdirectories hij heeft, en van elke subdirectory wil ik weten hoeveel subdirectiries die weer bevat en hoeveel mediabestanden hij heeft.
Dat doe ik met de volgende query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| select
media_dir.dirID as media_dir_id,
media_dir.name as media_dir_name,
count(md.dirID) as aantal_dir,
count(m.mediaID) as aantal_files
from
media_dir
left join
media_dir md
on (media_dir.dirID = md.parentID)
left join
media m
on (media_dir.dirID = m.dirID)
where
media_dir.parentID = 2
group by
media_dir.dirID
order by
media_dir.name
asc |
Nu krijg ik netjes alle results terug. Alles prima. Behalve als ik alle subdirectories van de root dir wil bekijken. Dan moet ik dus alle directories ophalen die parentID = 1 hebben. Dan geeft hij voor zowel de directories als het aantal files een raar getal terug: subdircount * 3. Dus heb ik 2 files en 3 subdirectories, krijg ik toch allebei 9 terug. Als ik nu een van de 2 joins + count (maakt niet uit welke) weghaal, haalt hij de resterende gegevens wel goed op.
Het vreemde is hier nu dat het in alle gevallen goed gaat, behalve in de root dir.
update: Hij telt blijkbaar altijd verkeerd, niet alleen bij de root.
Iemand een idee?
[ Voor 4% gewijzigd door Nielsz op 29-08-2005 15:00 ]