[MySQL] Mehrfache Joins !?
moidaschl 13.09.2005 - 21:58 870 5
moidaschl
Vollzeit-Hackler
|
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)
|
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
|
Du suchst also den Syntax für Joins? In etwa so würde das aussehen: 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
|
|
rettich
Legendwaffle, waffle!
|
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
|
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)
|