Phpmyadmin Tabellenbeziehungen

Und alles was mit phpMyAdmin seine Verwandtschaft findet hat hier seinen Platz.

Phpmyadmin Tabellenbeziehungen

Postby Salom » 19. February 2007 13:06

Hallo zusammen,
wir haben in der Berufsschule die Aufgabe bekommen einen Web-Shop mit Hilfe von phpmyadmin zu machen. Auf dem Papier "funktioniert" es soweit. Aber implementiere ich alles in phpmyadmin und frage eine Tabelle über einen Fremdschlüssel ab so gibt er mir alles aus was in der Tabelle steht auf dem sich der Fremdschlüssel bezieht.

Also ich habe z.B. eine Tabelle
u]Laden[/u]
Laden_id....1.....................2
PLZ...........14712.............45143

und eine andere Tabelle
Ware
Ware_id....1.........................2
Gemüse....Gurke...................Paprika
Obst..........Mandariene...........Birne
Laden_fid..1.........................2

Wenn ich nun die SQL abfrage mache:
SELECT PLZ FROM laden,ware WHERE Gemüse="Gurke";
spruckt er mir anstatt 14712 beide PLZ´s aus.
Warum macht er das?
Die Primärschlüssen sind bei den beiden Tabellen jeren id (Ware_id,Laden_id).
Was mache ich falsch?
Salom
 
Posts: 3
Joined: 19. February 2007 12:56

Re: Phpmyadmin Tabellenbeziehungen

Postby LigH » 19. February 2007 13:17

Salom wrote:SELECT PLZ FROM laden,ware WHERE Gemüse="Gurke";
spruckt er mir anstatt 14712 beide PLZ´s aus.
Warum macht er das?

Kennst du den Unterschied zwischen "INNER JOIN" und "OUTER JOIN"/"CROSS JOIN"?

Eine Aufzählung von Tabellen erzeugt normalerweise ein Ergebnis, das alle möglichen Kombinationen enthält, die man nicht explizit ausgeschlossen hat. Man sollte daher den simplen Komma-JOIN (NATURAL JOIN) vermeiden und lieber ausführlich schreiben, was man meint. Dann kommt in die ON-Klausel auch die einschränkende Bedingung, dass der Primärschlüssel der einen Tabelle gleich dem Fremdschlüssel der anderen Tabelle sein muss (Laden_id=Laden_fid):

Code: Select all
SELECT PLZ FROM laden
INNER JOIN ware ON Laden_id=Laden_fid
WHERE Gemüse="Gurke"


Versuch macht kluch. ;)

Ein "NATURAL JOIN" (PK = FK implizit) funktioniert normalerweise auch nur dann, wenn die Schlüssel exakt gleich heißen.
LigH
 
Posts: 7
Joined: 19. February 2007 12:07

Postby Salom » 19. February 2007 13:26

Bin eben selber drauf gekommen, habs einfach zum schluss mit AND deklariert.
Man warum bin ich da nich vorher drauf gekommen, aber das mit dem Versuch macht kluch..ich hab gestern 3h gesessen und immer an anderen Tabellen, :oops: bin ja schließlich neu darin

Vielen dank!
Salom
 
Posts: 3
Joined: 19. February 2007 12:56

Postby LigH » 19. February 2007 14:08

Da du ja eh grad am Basteln bist:

Lass dir mal mit "EXPLAIN ..." (oder in phpMyAdmin: "Erklärung") anzeigen, wie MySQL da jeweils arbeitet - einmal "Kurz-JOIN" mit Komma und WHERE ... AND, und einmal mit INNER JOIN ... ON. In einigen Fällen mag es da durchaus Performance-Unterschiede geben. ;)
LigH
 
Posts: 7
Joined: 19. February 2007 12:07


Return to phpMyAdmin

Who is online

Users browsing this forum: No registered users and 2 guests