Ik probeer voor het welbekende phpBB forumsysteem een query te schrijven die in één keer per subforum de namen geeft die per forum de meeste topics geplaatst hebben, met het desbetreffende aantal erbij. Ik verwacht dus een resultaat zoals dit:
Maar in plaats daarvan, krijg ik iets als dit, met dus teveel rijen en niet uitgesplitst per forum:
Mijn query is als volgt, ik denk dat de kolom- en tabelnamen wel voor zich spreken;
Het heeft dus alles te maken met het groeperen van de rijen. Ik heb veel varianten geprobeert, maar het lukt niet zoals ik wil.
Een GROUP BY op "f.forum_id" alleen geeft wel het goede áántal rijen, maar de opgetelde topics zijn daarbij niet uitgesplitst per lid (wat dus betekent dat de gegeven namen willekeurig zijn) en als ik alleen groepeer op "u.user_id" krijg ik een uitdraai van alle gemaakte topics per lid, wat me dus evenveel rijen oplevert als dat er topics zijn geplaatst door verschillende leden in verschillende forums.
Waar doe ik iets fout? Hetgeen ik wil moet toch mogelijk zijn? Mijn server draait MySQL versie v3.23.58, als er meer details nodig zijn wat betreft de tabelstructuur geef ik die graag.
code:
1
2
3
4
5
| nickname | user_id | topics | forum ===================================== piet | 23 | 102 | auto's henk | 345 | 340 | muziek klaas | 5 | 84 | boeken |
Maar in plaats daarvan, krijg ik iets als dit, met dus teveel rijen en niet uitgesplitst per forum:
code:
1
2
3
4
5
6
7
8
9
| nickname | user_id | topics | forum ===================================== piet | 23 | 102 | auto's henk | 345 | 76 | auto's marie | 8 | 74 | auto's henk | 345 | 70 | muziek joop | 12 | 64 | auto's klaas | 5 | 52 | boeken piet | 23 | 30 | muziek |
Mijn query is als volgt, ik denk dat de kolom- en tabelnamen wel voor zich spreken;
code:
1
2
3
4
5
6
7
| SELECT u.username AS nickname, u.user_id, COUNT(u.user_id) AS topics, f.forum_name AS forum FROM phpbb_topics t, phpbb_users u, phpbb_forums f WHERE t.topic_poster = u.user_id AND t.forum_id = f.forum_id AND u.user_id <> -1 GROUP BY u.user_id, f.forum_id ORDER BY topics DESC, forum_order ASC; |
Het heeft dus alles te maken met het groeperen van de rijen. Ik heb veel varianten geprobeert, maar het lukt niet zoals ik wil.
Een GROUP BY op "f.forum_id" alleen geeft wel het goede áántal rijen, maar de opgetelde topics zijn daarbij niet uitgesplitst per lid (wat dus betekent dat de gegeven namen willekeurig zijn) en als ik alleen groepeer op "u.user_id" krijg ik een uitdraai van alle gemaakte topics per lid, wat me dus evenveel rijen oplevert als dat er topics zijn geplaatst door verschillende leden in verschillende forums.
Waar doe ik iets fout? Hetgeen ik wil moet toch mogelijk zijn? Mijn server draait MySQL versie v3.23.58, als er meer details nodig zijn wat betreft de tabelstructuur geef ik die graag.