[MySQL] Mehrfache Joins !?

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql_mehrfache_joins_149233/page_1 - zur Vollversion wechseln!


moidaschl schrieb am 13.09.2005 um 21:58

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 schrieb am 13.09.2005 um 23:58

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.


Gulinborsti schrieb am 14.09.2005 um 09:34

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...


vossi schrieb am 14.09.2005 um 09:48

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 schrieb am 14.09.2005 um 09:48

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 schrieb am 14.09.2005 um 12:13

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)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026