Witam

Mam nastepujace tabele(przedstawiam pola kluczowe):

gracze(idGracza)
budynki(idBudynku)
bgraczy(idBG,idGracza,idBudynku) - jakie budynki posiada dany gracz
wymbud(idWB,idBudynku,idBudynkuWym) - jakie sa wymagania danego budynku(id budynki ktory chcemy zbudowac i id budynku ktory jest wymagany)

Chce wybrac wszystkie budynki, ktore moze wybudowac konkretny gracz.
Probowalem w ten sposob:

  1. SELECT budynki.*, gracze.nick
  2. FROM gracze INNER JOIN (budynki INNER JOIN (wymbud INNER JOIN bgraczy ON wymbud.idBudynkuWym = bgraczy.idBudynku) ON budynki.idBudynku = wymbud.idBudynku) ON gracze.idGracza = bgraczy.idGracza
  3. WHERE (((gracze.nick)="jakis nick"));


Jednak zwraca to mi budynki, ktore gracz juz posiada(to nie jest duzy problem) oraz budynki, ktorych conajmniej 1 wymaganie jest spelnione(a nie wszystkie, budynek moze wymagac np. 5 innych).

Z gory dziekuje za pomoc
Pozdrawiam
Michał Malus

----edit----
Proszę używać odpowiedniego bbCode. W tym przypadku [ sql ]
~mike_mech



Doszedlem do takich trzech kwerend:

budyki_gracza_x:
  1. SELECT budynki.*
  2. FROM gracze INNER JOIN (budynki INNER JOIN bgraczy ON budynki.idBudynku = bgraczy.idBudynku) ON gracze.idGracza = bgraczy.idGracza
  3. WHERE gracze.nick="jakis gracz";


wymagania_budynku_x:
  1. SELECT budynki.*
  2. FROM budynki INNER JOIN wymbud ON budynki.idBudynku = wymbud.idBudynkuWym
  3. WHERE wymbud.idBudynku=jakisNr;


budynki ktore trzeba wybudowac, aby moc zbudowac dany budynek(jezeli puste to ok):
  1. SELECT wymagania_budynku_x.nazwa
  2. FROM wymagania_budynku_x LEFT JOIN budyki_gracza_x ON wymagania_budynku_x.idBudynku = budyki_gracza_x.idBudynku
  3. WHERE (((budyki_gracza_x.shortnazwa) IS NULL));


Tylko teraz nie wiem jak je polaczyc.