[SQL] Selectie op 3 tabellen doen met 3 voorwaarden

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:12
Hallo mensen,

Ik ben op het werk bezig met het maken van fatsoenlijke URLs. Nu wil de baas er geen id's meer in hebben dus wordt de url als volgt: www.domein.tld/events/slayer+013+Tilburg.html

Nu moet ik adhv die voorwaarden het juiste event uit de database zien te krijgen. Dit is echter een beetje een probleem gezien de database structuur.
De lokaties worden opgeslagen als groepen, vervolgens zijn er voor alle zaken groepen gekoppeld aan een event. In dit voorbeeld de groep slayer, de groep 013 en de groep Tilburg.

Kort gezegd moet ik op de volgende data een selectie uitvoeren:
tabel_events
- event_id
- eventname
- .. rest van data

tabel_relatedGroups_index
event_id
group_id

tabel_groups
- group_id
- groupname
- type (deze moet dus location of city zijn)
Het kan natuurlijk voorkomen dat slayer vaker heeft opgetreden en er dus meedere events met de naam slayer in de database staan. Nu moet dus het event opgehaald worden waarvan er een groep met type location en naam '013' bestaat, en waarvan een groep bestaat met type city en naam 'Tilburg'. En de eventnaam moet natuurlijk overeenkomen.

De baas is blijkbaar niet zo heel technisch en ik wist van te voren ook niet dat de db structuur zo fantastisch in elkaar steekt. :D

Dus.. weet iemand of dit mogelijk is, en hoe? Ik kom niet verder dan een query waar ik alles selecteer uit events tabel, en de andere 2 tabellen join. Maar vanaf daar weet ik het niet meer. :+

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • 0 Henk 'm!

  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 18-09 13:44

Tukk

De α-man met het ẞ-brein

code:
1
2
3
4
5
6
7
Select a.group_name, a.type
          from tabel_groups a
where a.group_id in (select b.group_id 
                     from tabel_relatedGroups_index b,
                          tabel_events c
                    where c.eventname = "Slayer"
                          and b.event_id = c.event_id)

Nu krijg je alle locaties en steden waar slayer ooit heeft opgetreden, aan jou om de gewenste filtering aan de query toe te voegen.

* Tukk wil nu 2 vrijkaartjes voor Slayer in 013 :P

[ Voor 9% gewijzigd door Tukk op 04-08-2009 15:03 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


Acties:
  • 0 Henk 'm!

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

Niemand_Anders

Dat was ik niet..

Waarom neem je dan ook niet de datum op in de url? De combinatie datum, artiest/groep en locatie is wel uniek. Bijvoorbeeld /events/20090808/Tilburg_013_Slayer.html

Een totaal andere optie is dat bij een invoer een 'unieke' naam moet worden opgegeven waarbij je eventueel op basis van de gegevens een suggestie kunt doen.

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


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:12
Ik ben helaas de baas niet.
Maar ik zit net door de database heen te zoeken en blijkbaar houden ze ook nog een tabel bij met lat long gegevens erin waar dus ook lokatie instaat. Zowel 013 als Tilburg/Nederland.

Die tabel is ook gekoppeld dmv een koppeltabel aan events tabel. Dat maakt het stukken makkelijker.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT e.* FROM
    event e
RIGHT JOIN
    event_geo_index gi
ON
    e.event_id = gi.eventID
RIGHT JOIN
    geo g
ON
    g.geo_id = gi.geoID
WHERE
    g.name = 'effenaar'
AND
    e.name = 'epica'
AND
    g.city = 'Tilburg'


Zo werkt het dus ook.

Toch bedankt voor de hulp.. :P

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • 0 Henk 'm!

  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 18-09 13:44

Tukk

De α-man met het ẞ-brein

Dus.... Er bestaan 2 verschillende tabellen, beide met dezelfde data? :X

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:12
Deze tabel is specifiek voor de lokaties. Ze hebben ook voor alle lokaties groepen aangemaakt. Maar een groep != een lokatie.. :P

Roses are red, violets are blue, unexpected '{' on line 32.

Pagina: 1