"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[MySQL] Mehrfache Joins !?

moidaschl 13.09.2005 - 21:58 797 5
Posts

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Abend!

Ich hoffe ihr könnt mir helfen, ich suche kein konkretes Anwendungsbeispiel mit Lösung sondern wen der mir helfen kann ein Problem zu realisieren.

Folgende Problemstellung hat sich bei einem Projekt von mir gebildet:

Analog zu den ganzen Counter-Strike Seiten im Internet (Die Clanwar Sektion meistens) hab ich versucht das für einen Verein zu realisieren, also ziemlich genau. (Damit man sich vorstellen kann was ich meine)

Ich lese aus einer Tabelle ein paar Werte aus und muss dann auf eine andere mit diesen Informationen zugreifen.

Konkret:

Aus meiner Tabelle "Bewerbe" lese ich Daten aus, unter anderem auch "bewerb_id" und "team_id". Jetzt sind das aber nur Zahlen und mit diesen Muss ich aber dann aus der Tabelle Bewerb den "Namen" und aus der Tabelle "Team" auch den Namen auslesen.

Meine Lösung war einfach ein Select aus Bewerbe und dann die ergebnisse aus dem Array heraus in lokale Variablen gespeichert. Dann mit den darunter wieder Select Abfragen mit WHERE team_id = $team_id (die weggespeicherte).

So! Nur hab ich dann in einem Skript zig Abfragen und ich bin mir ziemlich sicher dass der overhead der dadurch entsteht bei vielen seitenaufrufen enorm ist. (Ich hab ein Trafficlimit bei meinem Hoster)

Kann ich das ganze in eine Abfrage packen, also sowas wie multiple-joins?

Ich hoffe es kann mir da wer auf die Sprünge helfen

mfg
Daschl

flocky

sn0wner (analphabet)
Avatar
Registered: May 2002
Location: life-compiler
Posts: 1663
eine kurze anmerkung dazu, gegenenfalls möge man mich korrigieren; du sagst du willst das wegen dem trafficlimit nicht über "lokale" variablen lösen, aber was macht das bei einem serverscript für einen unterschied? die variablen kommen ja gar nicht zum client, somit kein traffic.
Bearbeitet von flocky am 14.09.2005, 00:00

Gulinborsti

Addicted
Avatar
Registered: Mar 2004
Location: Wien
Posts: 469
Du suchst also den Syntax für Joins?

In etwa so würde das aussehen:

Code:
SELECT bewerbe.name, team.name FROM bewerbe LEFT JOIN team ON bewerbe.team_id = team.team_id;
Liefert alle Namen aus Bewerbe und die entsprechenden Namen der eingetragenen Teams.

Aber such dir eine Einführung in SQL bzw. JOINS, ist nicht sonderlich kompliziert...
Bearbeitet von Gulinborsti am 14.09.2005, 09:44

vossi

been there, done that
Avatar
Registered: Feb 2003
Location: Vienna
Posts: 1436
http://dev.mysql.com/doc/mysql/en/join.html
+
http://www.aspheute.com/artikel/20001023.htm
+
Traffic geht dadurch keiner drauf - nur deine Page wird halt langsam.

Wenn du aus 2 Tables absolut zusammengehörende und einmalige Daten haben willst dann ist sicher ein INNER JOIN das beste.

Ansonsten: Warum speicherst du die Variablen extra nochmal in ein Array wenn das MySQL Resultset eh sehr "geduldig" ist und alles mit sich machen lässt :)

rettich

Legend
waffle, waffle!
Avatar
Registered: Jan 2004
Location: wien
Posts: 794
Zitat von moidaschl
Meine Lösung war einfach ein Select aus Bewerbe und dann die ergebnisse aus dem Array heraus in lokale Variablen gespeichert. Dann mit den darunter wieder Select Abfragen mit WHERE team_id = $team_id (die weggespeicherte).

hä? google mal nach t-SQL joins. sowas kannst mit einer einzigen abfrage lösen, und die arbeit dabei macht der DB-server...

ca so:

select b.spalte, c.spalte from a
join b on a.erste_id = b.a_id
join c on a.zweite_id = c.a_id
where a.spalte = xy

joins sind beliebig multiplizierbar. einfach gesagt musst du nur mit dem typ des joins aufpassen, wenn du eine tabelle dazujoinst, die möglicherweise keine passenden werte beinhaltet.

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Zitat von rettich
hä? google mal nach t-SQL joins. sowas kannst mit einer einzigen abfrage lösen, und die arbeit dabei macht der DB-server...

ca so:

select b.spalte, c.spalte from a
join b on a.erste_id = b.a_id
join c on a.zweite_id = c.a_id
where a.spalte = xy

joins sind beliebig multiplizierbar. einfach gesagt musst du nur mit dem typ des joins aufpassen, wenn du eine tabelle dazujoinst, die möglicherweise keine passenden werte beinhaltet.

sowas hab ich gesucht, werd mir das anschauen, danke!

(bei interesse kann ich den code posten den ich meine)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz