![]() |
Datenbank: MySQL • Version: 4 • Zugriff über: PHP
mysql-query über mehrere Tabellen, mit Ausnahmen
Es geht um zwei Tabellen. Diese sind bestndteil eines Spiels. Eine Tabelle enthält infos über Spieler und die andere über allianzen (mehrere Spieler können sich zu eine ally zusamennschließen. Mit diesem Query hole ich mir eine Tabelle:
SQL-Code:
aber so bekomme ich die Spieler nicht, die in keiner ally sind (spieler.allianz =0).
SELECT spieler.id,allianzen.id,Nick,allianzen.kurzname,Konstruktionen,Forschungen,Flotte,Spezialisierung,Bemerkungen FROM spieler,allianzen WHERE spieler.allianz=allianzen.id
Jemand 'ne idee, wie ich das umformuliere? Oder wie ich das grundsätzlich lösen kann? |
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
Du solltest die neuere JOIN-Syntax verwenden:
SQL-Code:
LEFT OUTER JOIN bedeutet: nimm alle Zeilen von Tabelle "spieler" (die steht nämlich links)
SELECT spieler.id,allianzen.id,Nick,allianzen.kurzname,Konstruktionen,Forschungen,Flotte,Spezialisierung,Bemerkungen
FROM spieler LEFT OUTER JOIN allianzen ON spieler.allianz=allianzen.id und verknüpfe mit Tabelle "allianzen". Wenn kein passender Datensatz in allianzen gefunden, dann sind alle Felder, die sich auf die rechte Tabelle beziehen = NULL. |
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
juuuhuuu, das geht!
Danke! Mal so ganz nebenbei: Das geht aber nur über 2 Tabellen, nicht über mehr, oder? |
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
Zitat:
SQL-Code:
Mit der Klammersetzung kannst du die Reihenfolge der JOINs festlegen.
SELECT TabA.*, TabB.*, TabC.*
FROM (TabA INNER JOIN TabB ON TabA.Feld1=TabB.Feld2) LEFT OUTER JOIN TabC ON TabA.Feld3=TabC.Feld3 Man darf die Klammern auch weglassen, dann verwendet das DBMS die Reihenfolge, die es am geeignesten hält. Im Ergebnis macht das keinen Unterschied, nur in der Performance. |
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
klingt gut. Wo ist denn der Unterschied zwischen INNER JOIN und OUTER JOIN?
|
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
Siehe:
![]() ![]() Dort sollte es erklärt werden. mfG |
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
Zitat:
SQL-Code:
Also ich habe eben die drei Tabellen
SELECT CONCAT(planeten.x,':',planeten.y,':',planeten.z),CONCAT(CONVERT('[' USING utf8),allianzen.kurzname,CONVERT(']' USING utf8)),spieler.Nick,planeten.Name,planeten.bemerkungen FROM planeten LEFT JOIN spieler ON (planeten.spielerid=spieler.id) LEFT JOIN allianzen ON (spieler.allianz=allianzen.id)
planeten, allianzen und spieler. planeten enthält eine spielerid und spieler enthält eine allianzid Und es geht um die Auslistung aller Planeten, inklusiver, welchem Spieler der Planet gehört und welcher Allianz der Spieler angehört. So, jetzt habe ich das alles geschrieben, um festzustellen, dass ich im oberen query einfach nur eine Tabelle falsch benannt habe *mit-der-hand-vor-den-kopf-hau* :wall: :wall: Aber gut, wenn jemand jetzt auchmal joins über mehrerer Tabellen machen will... Nur den Unterschied zwischen INNER und OUTER und normal JOIN habe ich jetzt immernochnicht verstanden... |
Re: mysql-query über mehrere Tabellen, mit Ausnahmen
Zitat:
![]() Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz