login  Naam:   Wachtwoord: 
Registreer je!
 Forum

gebruikers eenmalig tonen welke lid zijn van meerdere groepen (Opgelost)

Offline Thuurke - 04/01/2013 11:24
Avatar van ThuurkeNieuw lid Hallo,

Ik heb een tabel met gebruikers en een tabel met gebruikersgroepen. Verder is er een koppeltabel aangezien er een n-n relatie bestaat.

In de groepen tabel heb ik een veld waar de rechten van een groep worden bij gehouden.

Nu wil ik een alfabetische lijst hebben van alle gebruikers die via een of meerdere groepen een bepaald recht hebben. De gebruiker dient maar eenmalig in de lijst voor te komen.

Ik heb wat geprobeerd, maar ik denk (weet het wel zeker eignelijk) dat de volgorde van benadering niet helemaal juist is.

Eerst zoeken naar de groepen die een bepaald recht hebben

SELECT fld_relatiesgroep_id
FROM tbl_leden_relaties_groepen
WHERE fld_relatiesgroep_rechten LIKE '%agendabekijken%'

Vervolgens bovenstaande query result doorlopen met

SELECT rel.fld_relatie_id,fld_relatie_naam
FROM tbl_relaties AS rel
LEFT JOIN tbl_koppeltabel AS relkop
ON rel.fld_relatie_id = relkop.fld_relatie_id
WHERE fld_relatiesgroep_id = ".$row['fld_relatiesgroep_id']."
ORDER BY fld_relatie_naam

Ik krijg vervolgens een lijst die per groep de gebruikers laat zien en dus ook doublures.
Hoe krijg ik een lijst met de gebruikers maar eenmalig?

10 antwoorden

Gesponsorde links
Offline marten - 04/01/2013 11:29
Avatar van marten Beheerder Group by user id en een group concat op de relatiegroep rechten.
Offline Thuurke - 04/01/2013 11:34
Avatar van Thuurke Nieuw lid Dat group by had ik al geprobeerd, maar aangezien de doublures uit de eerste query ontstaan werkt dat niet. De eerste query moet lijkt mij ergens in de 2e verwerkt te moeten worden.
Offline marten - 04/01/2013 11:39
Avatar van marten Beheerder Maar je wil een lijst hebben van alle gebruikers die alleen op agendabekijken gerechtigd zijn?
Offline Thuurke - 04/01/2013 11:45
Avatar van Thuurke Nieuw lid Met mijn huidige query's is het resultaat dus:

gebruikersgroep 1
-----gebruiker 1
-----gebruiker 5
gebruikersgroep2
-----gebruiker 3
-----gebruiker 5

Ik doorloop dus de gebruikersgroepen en daarna met de 2e query leest ik dan de gebruikers uit.
Offline marten - 04/01/2013 11:52 (laatste wijziging 04/01/2013 11:53)
Avatar van marten Beheerder En dat wil je in 1 query hebben dus? Of juist andersom? per gebruiker alle data groepen?
Offline Thuurke - 04/01/2013 11:56 (laatste wijziging 04/01/2013 12:26)
Avatar van Thuurke Nieuw lid Ik wil inderdaad een lijst laten zien van gebruikers (of relaties heb ze door elkaar gebruikt zie ik) die via een of andere groep een bepaald recht hebben.

Ik zal de tabellen even uit typen

relaties
=========
fld_relatie_id
fld_naam

relatiegroep
=============
fld_relatiegroep_id
fld_rechten (of een bepaalde andere voorwaarde)

koppeltabel
===============
fld_relatie_id
fld_relatiegroep_id


Ik heb nog even wat anders geprobeerd.

Met

SELECT relkop.fld_relatie_id,relkop.fld_relatiegroep_id
FROM koppeltabel AS relkop
LEFT JOIN relatiegroep AS rel
ON rel.fld_relatiegroep_id = relkop.fld_relatiegroep_id
WHERE fld_relatiesgroep_rechten LIKE '%agendabekijken%'
GROUP BY relkop.fld_relatie_id

krijg ik een lijstje met de gebruikers zonder doublures.
Ze staan echter nog niet in de alfabetische volgorde.
Offline marten - 07/01/2013 10:19
Avatar van marten Beheerder Dat kan je doen met een ORDER BY natuurlijk he 
Offline Thuurke - 07/01/2013 10:52
Avatar van Thuurke Nieuw lid Dat snap ik alleen zit de ORDER BY niet in de koppeltabel en de relatiegroeptabel maar in de relatie tabel en deze heb ik dus niet in deze query.

SELECT relkop.fld_relatie_id,relkop.fld_relatiegroep_id
FROM koppeltabel AS relkop
LEFT JOIN relatiegroep AS rel
ON rel.fld_relatiegroep_id = relkop.fld_relatiegroep_id
WHERE fld_relatiesgroep_rechten LIKE '%agendabekijken%'
GROUP BY relkop.fld_relatie_id

dus mijn vraag is hoe verwerk ik tabel 3 (de relatietabel) in bovenstaande query om hier de namen en de sortering uit te halen?
Offline marten - 07/01/2013 11:00
Avatar van marten Beheerder Je kan inner joinen op de tabel.

SELECT relkop.fld_relatie_id,relkop.fld_relatiegroep_id
FROM koppeltabel AS relkop

LEFT JOIN relatiegroep AS rel
ON rel.fld_relatiegroep_id = relkop.fld_relatiegroep_id

INNER JOIN tabelnaam AS tabelAfkorting ON tabelAfkorting.id = tabelnaam.id

WHERE fld_relatiesgroep_rechten LIKE '%agendabekijken%'
GROUP BY relkop.fld_relatie_id
Bedankt door: Thuurke
Offline Thuurke - 07/01/2013 17:18
Avatar van Thuurke Nieuw lid Het lijkt er op dat dit gaat werken!
Bedankt!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.181s