AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken mysql-query über mehrere Tabellen, mit Ausnahmen
Thema durchsuchen
Ansicht
Themen-Optionen

mysql-query über mehrere Tabellen, mit Ausnahmen

Ein Thema von yankee · begonnen am 4. Jul 2005 · letzter Beitrag vom 4. Jul 2005
Antwort Antwort
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 17:17
Datenbank: MySQL • Version: 4 • Zugriff über: PHP
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:
SELECT spieler.id,allianzen.id,Nick,allianzen.kurzname,Konstruktionen,Forschungen,Flotte,Spezialisierung,Bemerkungen FROM spieler,allianzen WHERE spieler.allianz=allianzen.id aber so bekomme ich die Spieler nicht, die in keiner ally sind (spieler.allianz =0).
Jemand 'ne idee, wie ich das umformuliere? Oder wie ich das grundsätzlich lösen kann?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 17:34
Du solltest die neuere JOIN-Syntax verwenden:
SQL-Code:
SELECT spieler.id,allianzen.id,Nick,allianzen.kurzname,Konstruktionen,Forschungen,Flotte,Spezialisierung,Bemerkungen
FROM spieler LEFT OUTER JOIN allianzen ON spieler.allianz=allianzen.id
LEFT OUTER JOIN bedeutet: nimm alle Zeilen von Tabelle "spieler" (die steht nämlich links)
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#3

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 17:37
juuuhuuu, das geht!
Danke!
Mal so ganz nebenbei: Das geht aber nur über 2 Tabellen, nicht über mehr, oder?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 17:46
Zitat von yankee:
Mal so ganz nebenbei: Das geht aber nur über 2 Tabellen, nicht über mehr, oder?
Doch das geht auch über mehrere Tabellen:
SQL-Code:
SELECT TabA.*, TabB.*, TabC.*
FROM (TabA INNER JOIN TabB ON TabA.Feld1=TabB.Feld2) LEFT OUTER JOIN TabC ON TabA.Feld3=TabC.Feld3
Mit der Klammersetzung kannst du die Reihenfolge der JOINs festlegen.
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#5

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 18:43
klingt gut. Wo ist denn der Unterschied zwischen INNER JOIN und OUTER JOIN?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von titus
titus

Registriert seit: 5. Apr 2004
Ort: Freiburg
232 Beiträge
 
#6

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 18:48
Siehe: http://dev.mysql.com/doc/mysql/de/join.html und http://dev.mysql.com/doc/mysql/de/le...imisation.html
Dort sollte es erklärt werden.

mfG
Daniel L.
'-'
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#7

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 19:11
Zitat von titus:
Ich habe es mla versucht:
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) Also ich habe eben die drei Tabellen
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*


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...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: mysql-query über mehrere Tabellen, mit Ausnahmen

  Alt 4. Jul 2005, 19:43
Zitat von yankee:
Nur den Unterschied zwischen INNER und OUTER und normal JOIN habe ich jetzt immernochnicht verstanden...
Dem kannst du aber durch ein Lesestudium bestimmt abhelfen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz