JOIN
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
art
benutzer
bringen
code
datum
entfernen
ergebnis
jemand
machen
null
ort
paar
person
praxis
spalten
spiel
syntax
tabelle
url
-
Hey,
kann mir jemand ein bisschen was zu JOIN sagen?
Ich hatte im Informatikunterricht MS Access und hab mir auch die SQL ab und zu angeguckt.
Hab daraufhin noch ein paar Tuts zu JOIN in PHP mir angeguckt, aber mir ist nicht ganz klar,
wann und wie genau man es verwendet.
Ist es sinnvoll hier Join zu verwenden:
while($query = mysql_fetch_object($sql)){ $name = mysql_fetch_object(mysql_query("SELECT * FROM bla WHERE name = '$query->nr'")); }
Wenn ja, wie mache ich das ?
Tabellenstruktur ist erstmal nur:
Tabelle Benutzer:
nr|name|....
Tabelle bla
nr|....
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo gurndsätzlich is ein join immer sinnvoll!
SELECT *
FROM benutzer
natural join bla
WHERE name = '$query->nr'
Also in deinem Fall natural join da foreign und primary key die gleiche bezeichnung haben. Sonst:
SELECT *
FROM benutzer
join bla on (benutzerNr = blaNr)
WHERE name = '$query->blaNr'
In der Praxis dann pls den * entfernen, zum testen is es jedoch OK -
Danke, hättest du irgendwo eine Übersicht mit den Join-Befehlen?
Es gibt ja INNER JOIN, LEFT JOIN usw. und ich weiß gar nicht genau was die bringen.
Warum sollte ich den * entfernen?
-
Hallo,
ich komme aus der Sybase- und seit neuestem aus der Oraclewelt, bin mit der Syntax also nicht so ganz vertraut, aber das Beispiel macht so noch nicht viel Sinn. Um das verständlich zu machen sollte noch eine Spalte in der Tabelle bla:
Tabelle Benutzer:
nr|name
1|max
2|berta
Tabelle bla
nr|Adresse
1|irgendwo
2|sonstwo
select benutzer.name, bla.Adresse
from benutzer join bla (on benutzer.nr = bla.nr)
Where benutzer.name = 'max'
(Sybasesyntax wobei die Syntax erstmal wurst ist, zumindes um das Prinzip zu verstehen)
Ergebnis
max, irgendwo
Joinen ist grundsätzlich sinnvoll, weil das Ergebnis schneller kommt als wenn man Subqueries verwendet.
Viel Spass beim tüfteln
Frank -
Ein INNER JOIN oder STRAIGHT JOIN oder einfach nur JOIN verknüpft zwei Tabellen in der Art dass in BEIDEN Tabellen Werte gefunden werden müssen:
TABELLE PERSONEN
ID_P, NAME, ID_GEBURTSORT
1, Müller, 1
2, Maier, NULL
3, Huber, 5
TABELLE ORTE
ID_O, ORT
1, Hamburg
2, München
5, Augsburg
SELECT * FROM PERSONEN JOIN ORTE ON (PERSONEN.ID_GEBURTSORT = ORTE.ID_O)
Ergebnis:
1, Müller, 1, 1, Hamburg
5, Huber, 5, 5, Augsburg
Ein LEFT JOIN oder LEFT OUTER JOIN erhält IMMER die Spalten der LINKEN Tabelle und füllt ggf. die Spalten der rechten Tabelle mit NULL auf.
SELECT * FROM PERSONEN LEFT JOIN ORTE ON (PERSONEN.ID_GEBURTSORT = ORTE.ID_O)
Ergebnis:
1, Müller, 1, 1, Hamburg
2, Maier, NULL, NULL, NULL
5, Huber, 5, 5, Augsburg
Ein RIGHT JOIN oder RIGHT OUTER JOIN macht das gleiche nur dass die RECHTE Tabelle IMMER kommt
SELECT * FROM PERSONEN RIGHT JOIN ORTE ON (PERSONEN.ID_GEBURTSORT = ORTE.ID_O)
Ergebnis:
1, Müller, 1, 1, Hamburg
NULL, NULL, NULL, 2, München
5, Huber, 5, 5, Augsburg
-
JOIN hat mir sehr viel gebracht :)
Aber nun komm ich wieder zu einem Problem:
Ich hab eine Tabelle mit folgender Struktur:
ID|team1|team2|
Ich nenn die Tabelle mal einfach spiele.
Jertzt hab ich eine 2. Tabelle, die die Spieltipps beinhaltet:
ID|sid|userid|tipp1|tipp2
Wie lese ich jetzt alle Daten aus der 1. Tabelle aus ohne die Datensätze auszulesen, wo es schon einen
Tipp gibt.
sid = spiele.id
userid = ID des User
Lg
-
Dafür gibts IS NULL
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage