Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] groepen herkennen

Pagina: 1
Acties:

  • -J00P-
  • Registratie: September 2004
  • Laatst online: 09-10 22:24
Er zijn twee tabellen, de tabel user, met een verzameling van gebruikers. En een tabel group met een verzameling van groepen gebruikers. In onderstaand voorbeeld zijn dus de groepen:

groep1 = {1,2} (resp. {kees, jan} )
groep2 = {jan, karel}

1:user
idname
1kees
2jan
3karel


2:group
group_iduser_id(fk van user)
11
12
22
23


Wat is nu een goede methode om te controleren of er van een groep willekeurige gebruikers al een groep is gevormd? Dus, in bovenstaand voorbeeld, wat voor query heb je nodig om te zien dat bijvoorbeeld jan en karel samen in een groep (groep2) zitten, maar kees en karel niet.

Ik moet bekennen dat ik werkelijk geen idee heb waar ik moet zoeken 8)7 dus hopelijk komt hier wat uit. Alvast bedankt.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
stel dat piet ook in groep 2 zit... dus groep 2 bestaat uit jan, karel en piet....
en je vraagt: is er een groep die bestaat uit jan en karel? wil je dan dat groep 2 als resultaat wordt gegeven of juist niet, omdat groep 2 uit meer dan jan en karel bestaat?

  • -J00P-
  • Registratie: September 2004
  • Laatst online: 09-10 22:24
nee, idd, dat had er nog bij gemoeten.

wanneer er gezocht wordt naar een groep met jan en karel zijn zij de enige in die groep. Er mogen dus geen andere personen in die groep zitten.

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

code:
1
2
select group_id from group g inner join user u on (g.user_id=u.userid) and 
(u.name in ('karel', 'kees')) group by group_id having (count(group_id) = 2)


De having count moet gelijk zijn aan het aan het aantal namen. Alleen als alle namen in 1 groep zitten zal namelijk die count gelijk zijn daaraan.

If it isn't broken, fix it until it is..


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik zie pas net de extra clausule van joop.

Update:
code:
1
2
3
4
5
select group_id from group g inner join user u on (g.user_id=u.userid) and 
(u.name in ('karel', 'kees')) and (group_id in 
  (select group_id from group where groupid=g.groupid 
     group by groep_id having count(group_id) = 2))
group by group_id having (count(group_id) = 2)

Ofwel je doet twee group by querties. De eerste subquery geeft de groepen terug waarbij het totaal aantal leden gelijk is aan het aantal opgegeven users. De inner join geeft alleen de groupen terug waarin de opgegeven users zitten. Die combinatie zou uniek moeten zijn.

If it isn't broken, fix it until it is..


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 25-11 01:01
Die doet het niet helemaal goed, wanneer je twee keer 'karel' ipv 'karel' en 'kees' hebt dan wordt het ook gezien als volledige groep.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
_js_ schreef op donderdag 19 juli 2007 @ 16:22:
Die doet het niet helemaal goed, wanneer je twee keer 'karel' ipv 'karel' en 'kees' hebt dan wordt het ook gezien als volledige groep.
dan moet je zorgen dat de invoer van data netjes gebeurd en dubbelen uitsluit....

  • -J00P-
  • Registratie: September 2004
  • Laatst online: 09-10 22:24
hier heb ik wel wat aan :) ik kan weer verder, bedankt!
Pagina: 1