• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

ID aus einer Tabelle, Beschreibung aus anderer

Bourbon

Mitglied
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. :)
Schlagwörter würden mir sicherlich auch schon reichen :)

Besten Dank im Voraus!

//EDIT
Ich denke mit InnerJoin und Theta müsste eigentlich genau das gemeint sein, wonach ich suche, oder?
 
Zuletzt bearbeitet:
Werbung:
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. :)
Schlagwörter würden mir sicherlich auch schon reichen :)

Besten Dank im Voraus!

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:
<!DOCTYPE html>
<html>
<head>
  <title>Vorbereitete Anweisung: SELECT</title>
  <meta charset="UTF-8" />
</head>
<body>
<?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 "<table border='1'>\n";
  while($stmt->fetch()) {
    echo "<tr>\n\t<td>"
       . htmlspecialchars($group_ID)
       . "</td>\n\t<td>"
       . htmlspecialchars($user_ID)
       . "</td>\n\t<td>"
       . htmlspecialchars($surname)
       . "</td>\n\t<td>"
       . htmlspecialchars($status)
       . "</td>\n</tr>\n";
    }
  $stmt->close();
}
$mysqli->close();
?>
</table>
</body>
</html>

Ohne den den Left Join und der Ausgabe des Nachnamens zeigt es Ergebnisse der Tabelle groupmembers an.
 
Zuletzt bearbeitet:
Werbung:
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:
<!DOCTYPE html>
<html>
<head>
  <title>Vorbereitete Anweisung: SELECT</title>
  <meta charset="UTF-8" />
</head>
<body>
<?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 "<table border='1'>\n";
  while($stmt->fetch()) {
    echo "<tr>\n\t<td>"
       . htmlspecialchars($group_ID)
       . "</td>\n\t<td>"
       . htmlspecialchars($user_ID)
       . "</td>\n\t<td>"
       . htmlspecialchars($surname)
       . "</td>\n\t<td>"
       . htmlspecialchars($status)
       . "</td>\n</tr>\n";
    }
  $stmt->close();
}
$mysqli->close();
?>
</table>
</body>
</html>

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

Ich tippe mal auf einen fehlenden Beistrich ;)

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.
 
Zuletzt bearbeitet:
Also absichtlich Joine ich nicht 2x :) 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.
 
Also absichtlich Joine ich nicht 2x :) 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 …"
 
Werbung:
Code:
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.
 
Code:
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.
 
Zuletzt bearbeitet:
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.
 
Werbung:
Leider verstehe ich nicht, wo ich das 2mal drin habe....
Kannst du mir die betreffenden Zeilen mal markieren?

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

Code:
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

Und die Fehlermeldung kommt leider nicht, es kommt schlicht gar nichts.
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 :) Ich weis das wirklich zu schätzen und bin jedes mal aufs Neue über die erstaunlich schnelle und erfolg-bringende Hilfe dieses Forums erstaunt!
 
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 :) 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 ;)

Das:
Code:
SELECT * FROM groupmembers, account ...
ist das selbe wie:
Code:
SELECT * FROM groupmembers JOIN account ...
du hattest:
Code:
SELECT * FROM groupmembers, account JOIN groupmembers ...
 
Werbung:
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 :)
 
Zurück
Oben