SQL joins

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

Ik zit met een probleempje, en ik weet niet zo goed hoe ik dit het beste kan oplossen. Misschien pak ik het fundementeel verkeerd aan. Ik kan i.i.g. niet bedenken hoe ik hier een nette oplossing voor kan maken en of dat uberhaupt wel mogelijk is binnen SQL.

Het probleem is als volgt. Ik wil een soort online Bracket maken (tournament bracket) waar de bracket uit meerdere 'bracket items' bestaat. De finale is bijvorbeeld een 'bracket item' en de kwartfinale ook.

Ik heb een tabel met bracket items:
Bracket_item
bracket_idwat extra info
1Blabla
2Bla die bla

Per bracket kunnen er meerdere potjes plaatsvinden. Het kan bijvoorbeeld zijn dat de winnaar van een bracket na een Best of 5 wint, of een best of 3. Ik heb dus een tabel "potjes" die gekoppelt worden aan een bracket. Daarnaast kunnen deze potjes op verschillende plekken gespeeld worden.
Potje
potje_idlocatie_idteam1_idteam2_idbracket_item_id
11121
21231
31412


Gelinkt aan een potje zitten dus locaties
locaties
idsoort locatie
1Watergebied
2Bergen
3Weide


Gelinkt aan de potjes zitten dus ook teams. Teams hebben ook weer een link naar een stad
teams
idteam naamteam kleurstad_id
1Pietjes teamRood1
2Jantjes teamZwart2
3Geerts teamBlauw2


stad
idnaam
1Amsterdam
2Parijs


Wat ik eigenlijk wil doen is een query op de database uitvoeren die een volgende soort array opleverd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[1] => Array
(
    [bracket_id] => 1
    [wat extra info] => Blabla
    [0] => Array
    (
    [potje_id] => 1
    [soort locatie] => Watergebied
    [team naam (1?)] => Pietjes team
    [team kleur (1?)] => Rood
    [naam (1?)] => Amsterdam

    [team naam (2?)] => Jantjes team
    [team kleur (2?)] => Zwart
    [naam (2?)] => Parijs
     )
     [1] => Array
     (
    [potje_id] => 2
    [soort locatie] => Watergebied
    [team naam (3?)] => Geerts team
    [team kleur (3?)] => Blauw
    [naam (3?)] => Parijs

    [team naam (2?)] => Jantjes team
    [team kleur (2?)] => Zwart
    [naam (2?)] => Parijs
     )

)


Ik weet alleen niet of het mogelijk is de waardes uit de 4de geneste tabel uit 1 query in zo'n tweedimensionele array te krijgen. Het enige wat ik kan bedenken is meerdere queries te doen zodra je de eerste twee geneste tabellen terug te krijgen.

Hopelijk kunnen jullie mij op weg helpen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Twee keer joinen op dezelfde tabel (die waar de teams in zitten) met elk een eigen alias. Betekent meteen ook dat je op dezelfde manier twee keer de stedentabel moet joinen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah oke, en dan renamen met AS.

Maar is het mogelijk om dus Brackets te selecten. En binnen de array item van de brackets dus meerdere potjes te selecteren.

Het kan dus zijn dat je 5 bracket_items hebt met aan elk bracket_item weer 7 potjes. Kan SQL wel die genestheid retourneren?

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op woensdag 06 april 2011 @ 22:04:
Maar is het mogelijk om dus Brackets te selecten. En binnen de array item van de brackets dus meerdere potjes te selecteren.

Het kan dus zijn dat je 5 bracket_items hebt met aan elk bracket_item weer 7 potjes. Kan SQL wel die genestheid retourneren?
In basis kan SQL geen genestheid retourneren, maar je kan wel een object transformator ertussen gooien. Wat van je resultset een object bouwt.

SQL is een setbased-taal die sets teruggeeft en geen objecten.

Kijk gewoon eerst eens wat sql wel en niet kan doen. En kijk dan eens naar iets als nhibernate oid, daarmee kan je krijgen wat je wilt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 06 april 2011 @ 22:04:
Ah oke, en dan renamen met AS.

Maar is het mogelijk om dus Brackets te selecten. En binnen de array item van de brackets dus meerdere potjes te selecteren.

Het kan dus zijn dat je 5 bracket_items hebt met aan elk bracket_item weer 7 potjes. Kan SQL wel die genestheid retourneren?
Nee, ik postte mijn vorige reply vanaf mijn telefoon en heb dat deel van je vraag gemist. :P Je zal dan inderdaad in je code moeten gaan knutselen, ofwel door met één query een hele hoop data op te halen en dat uit te filteren, ofwel door een masterquery te doen en dan voor elke rij nog een aparte query. Gezien het feit dat een toernooi vast geen honderden potjes heeft zal dat laatste niet snel een performance hit opleveren. :)

Overigens weet ik niet of ik brackets als aparte entiteit zou opnemen. Het heeft vast andere haken en ogen maar ik zou zelf proberen om, als het mogelijk is, fights gewoon aan een toernooi te hangen. Potje bepaalt wie erin speelt, de winnaars in eventuele voorgaande fights bepalen in je overzichten de hiërarchie.

@Gomez12: ik denk dat het handiger is om het beestje even bij zijn naam te noemen (ORM) dan om een stukje voorbeeldsoftware te noemen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Als aanvulling zou ik de kleur van het team ook in een losse tabel plaatsen.

Acties:
  • 0 Henk 'm!

  • erwin85
  • Registratie: Juli 2002
  • Laatst online: 29-08 14:41
Verwijderd schreef op donderdag 07 april 2011 @ 15:20:
Als aanvulling zou ik de kleur van het team ook in een losse tabel plaatsen.
Dat zou ik niet doen, de kleur komt maar 1 keer voor neem ik aan.
Pagina: 1