ID aus einer Tabelle, Beschreibung aus anderer

Hallo Leute,

ich hab leider noch nichts passendes per Google gefunden, wahrscheinlich suche ich einfach mit den falschen Schlagwörtern.

Erstmal zum Problem:
Ich frage in der einen Datenbank Nummern (IDs) nach einem bestimmten Kriterium ab. In einer anderen Tabelle der selben Datenbank stehen dann die passenden Beschreibungen zu den IDs.
Jetzt will ich, dass zusätzlich zu den ausgegebenen Zahlen (IDs) auch die passende Beschreibung ausgeben wird.

Wie könnte ihr mir helfen:
Entweder nennt ihr mir das passende Schlagwort, damit ich Google nochmals durchforsten kann oder aber durch eine kurze Erklärung. :slight_smile:
Schlagwörter würden mir sicherlich auch schon reichen :slight_smile:

Besten Dank im Voraus!

//EDIT
Ich denke mit InnerJoin und Theta müsste eigentlich genau das gemeint sein, wonach ich suche, oder?

Du suchst nach einem LEFT JOIN

Also ich habe da jetzt einige Seiten gefunden und eigentlich musste das jetzt auch funktionieren, aber es zeigt leider keine Ergebnisse (man sieht nichts).

Ich habe den Code aus einem anderen Thread mal etwas verändert.
Warum klappt das mit dem LEFT JOIN nicht?
Hier der Code:

[PHP]

Vorbereitete Anweisung: SELECT <?php require_once "db_daten.php"; $suche = "%1%"; if($stmt = $mysqli->prepare( "SELECT gm.group_ID, gm.user_ID, gm.status, ac.surname FROM groupmembers gm account ac LEFT JOIN groupmembers gm ON gm.user_ID = ac.userid WHERE gm.group_ID LIKE ? ")) { $stmt->bind_param("s", $suche); $stmt->execute(); $stmt->bind_result($group_ID, $user_ID, $surname, $status); echo "\n"; while($stmt->fetch()) { echo "\n\t\n\t\n\t\n\t\n\n"; } $stmt->close(); } $mysqli->close(); ?>
" . htmlspecialchars($group_ID) . "" . htmlspecialchars($user_ID) . "" . htmlspecialchars($surname) . "" . htmlspecialchars($status) . "
[/PHP]

Ohne den den Left Join und der Ausgabe des Nachnamens zeigt es Ergebnisse der Tabelle groupmembers an.

Ich tippe mal auf einen fehlenden Beistrich :wink:

Edit: Obwohl, joinst du absichtlich 2x? Verstehe zumindest nicht ganz was das werden soll.
Am besten du schreibst die SQL Abfrage in phpMyAdmin oder was immer du auch verwendest. Wenn Sie fertig ist und richtig funktioniert, überträgst du sie erst in den PHP Code.

Also absichtlich Joine ich nicht 2x :slight_smile: Ich dachte, man schreibt das so.
Wie müsste es denn eigentlich aussehen?

Wie schreibe ich das in phpmyadmin? Einfach den Code als Befehl in SQL eingeben? Habe das noch nie gemacht.

Ich weiß nicht wie es eigentlich aussehen sollte, da ich nicht weiß wie deine Tabellen aussehen und was du als Ergebnis möchtest.

Jedenfalls denke ich dass das erste „groupmembers gm“ weg sollte, da diese Tabelle später nochmal gejoined wird.

SQL-Statements kannst du in phpMyAdmin unter dem Tab „SQL“ ausführen. Hier gehört ausschließlich SQL-Code rein, kein PHP-Code…:

„SELECT * FROM account LEFT JOIN groupmembers ON (…) WHERE …“

SELECT gm.group_ID, gm.user_ID, gm.status, ac.surname FROM groupmembers gm account ac LEFT JOIN gm.user_ID = ac.userid WHERE gm.group_ID LIKE ? "

So sieht der Code jetzt aus, es funktioniert immer noch nicht.
Eigentlich soll der nur in einer Tabelle alle Einträge untereinander auflisten, die die Gruppen-ID 1 haben.

Quasi:
group_ID - user_ID - surname - status
1 - 1 - Müller - 1
usw.

Du hast ja noch immer die gleichen Fehler (2x groupmembers!) drin…
Außerdem solltest du eine Fehlermeldung „You have an error in your SQL syntax…“ bekommen.

Leider verstehe ich nicht, wo ich das 2mal drin habe…
Kannst du mir die betreffenden Zeilen mal markieren?

Und die Fehlermeldung kommt leider nicht, es kommt schlicht gar nichts.

Wie gesagt, nur SQL ist momentan wichtig, nicht PHP.
Hier - ausnahmsweise - eine saubere, reine SQL Abfrage:

SELECT gm.group_ID, gm.user_ID, gm.status, ac.surname FROM groupmembers AS gm LEFT JOIN account AS ac ON (gm.user_ID = ac.userid) WHERE gm.group_ID = 1

Führst du das auch wie beschrieben in phpMyAdmin aus?! Da bekommst du garantiert eine Fehlermeldung.

Jetzt funktioniert es einwandfrei.
Aber ich hatte doch nur die „account“-Tabelle 2x drin oder sehe ich schlecht.
Prinzipiell waren die gravierendsten Fehler das fehlende „ON“ nach dem Left Join.

Und vielen Dank für die Ausnahme, mir einen reinen SQL-Code zu erstellen :slight_smile: Ich weis das wirklich zu schätzen und bin jedes mal aufs Neue über die erstaunlich schnelle und erfolg-bringende Hilfe dieses Forums erstaunt!

Kein Problem :wink:

Das:

SELECT * FROM groupmembers, account ...

ist das selbe wie:

SELECT * FROM groupmembers JOIN account ...

du hattest:

SELECT * FROM groupmembers, account JOIN groupmembers ...

Ah okay, jetzt hab ich es endlich verstanden.
Leider wird es nicht in jedem Buch richtig verständlich erklärt.
Die erklären zwar immer den Quelltext, aber meist nicht die Logik, die dahinter steht. Und dann entstehen solche Fehler.

Aber das hat mich jetzt schon ein ganzes Stück weiter gebracht :slight_smile: