[SQL][PHP][Zend F] Lijst met duplicate results

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cooleronie
  • Registratie: Augustus 2011
  • Laatst online: 22-12-2023
Goedemorgen,

Ik zit met een probleempje. Om te beginnen, ik heb de tabellen: 'groups', 'pages' en de koppeltabel 'subscriptions'.

Het idee hierachter is dat een groep (met gebruikers) op een pagina kan abonneren. Een gebruiker voegt een pagina toe als abonnement aan een groep waarin hij in zit. (many-to-many) Ter info: een gebruiker kan in meerdere groepen zitten.

Als onderdeel van de UI wil ik een lijst maken hiervan. Van elke groep wil ik de gekoppelde pagina's hebben. (Groep: ... Pagina's: - .... -.... | Groep: ... Pagina's: -... -... etc.)

De query is opzich geen probleem:

code:
1
2
3
4
5
SELECT Groups.name, pages.name, pages.id
FROM Groups
JOIN subscriptions ON groups.id = subscriptions.group_id
JOIN pages ON subscriptions.page_id = pages.id
WHERE groups.id IN ('1', '2')   // de values 1 & 2 zijn voorbeelden en stellen de groepen id's voor waarin de huidige gebruiker zit.


De resultaat ziet er dan bijvoorbeeld zo uit:
group namepage namepage id
groepje1pagina11
groepje1pagina22
groepje2pagina11


Nu is mijn vraag als volgt: Hoe ik krijg een lijst waarbij uit de result array (object) ik de groepnaam krijg en daaronder alle pagina's die aan die groep gekoppeld zijn? (zie voorbeeld hierboven). Dit bedoel ik dus in PHP ( Ik heb gebruik zend framework, maar de oplossing heb ik daarin niet kunnen vinden).

Of ik moet voor elke groep een aparte query doen?

Normaal gesproken doe ik ofwel een foreach() of een while() maar dat gaat in dit geval niet op.

Ik ben nog nieuw in deze wereld dus als jullie me in de goede richting willen sturen graag :)

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Je moet een aparte foreach loop schrijven die de resultaten van de query omzet naar de datastructuur die jij wilt hebben. Dus iets als:

PHP:
1
2
3
4
$data = array();
foreach($result as $group => $page) {
  $data[$group][] = $page;
}


Dan krijg je in $data per $group een array met daarin alle pages.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Een foreach / handmatig de koppeling van relationele, row-based resultaten naar meer OO-achtige mapping is inderdaad de voor de hand liggende oplossing. Als je dit vaker - veel vaker - gaat krijgen, kun je echter (mijns insziens) beter naar een framework kijken die dit voor je doet; ZF heeft daar zelf een component voor, als ik het me goed herinner, en anders kun je naar een volledig ORM zoals Doctrine kijken, mits je geen angst hebt om een nieuwe tool te leren.