MySQL ID auslesen?

...komplette Frage anzeigen

1 Antwort

  1. Die Tabelle user benötigt noch eine Spalte, in der der Name gespeichert wird.
  2. Was bezeichnet die fahrer_id? Ist das ein Verweis auf den User? Jedenfalls brauchst du eine Relation zwischen den Einträgen des Fahrtenbuch und dem User oder einen Fremdschlüssel in einer beider Tabellen.
  3. Nun kannst du die passende SQL-Anfrage formulieren. Bspw. könntest du die 2 bereits bestehenden Tabellen via Join miteinander verbinden (http://www.w3schools.com/sql/sql_join.asp)
Antwort bewerten Vielen Dank für Deine Bewertung
LetsDance2001 06.10.2016, 14:57

Danke für die Antwort aber ich werde daraus nicht ganz schlau. Ich habe einmal in der Tabelle "users" eine Spalte namens "fahrer_id" und in der Tabelle "fahrtenbuch" eine Spalte namens "fahrer_id". Momentan wird mir im Fahrtenbuch aber nur jeweils die ID angezeigt und nicht der Name des Fahrers und genau das will ich ja ändern.

0
LetsDance2001 06.10.2016, 15:29
@LetsDance2001

Hier nochmal zur verdeutlichung.

<?php 
$statement = $pdo->prepare("SELECT * FROM fahrtenbuch ORDER BY id");
$result = $statement->execute();
$count = 1;
while($row = $statement->fetch()) {
echo "";
echo "".$count++."";
echo "".$row['fahrerid']."";
echo "".$row['start']."";
echo "".$row['ziel']."";
echo "".$row['frachtart']."";
echo "".$row['gefkm']." KM";
echo "".$row['verdienst']." €";
echo "";
}
?>

Das ganze wird als tabelle ausgegeben und anstatt der fahrerid soll die Tabelle des jeweiligen Fahrers ausgeben. Hoffe das ist verständlich.

0
regex9 06.10.2016, 19:21
@LetsDance2001

Nein, mit dem vorletzten Satz ist es leider gerade unverständlich geworden. Ich gehe davon aus, dass du den Namen des Fahrers ausgeben möchtest, richtig?

Wenn ja, dann muss der Name des Fahrers auch in irgendeiner Datenbanktabelle stehen. Die Datenbank kennt ja nur das, was in ihr auch gespeichert wird.

Deine Tabelle user ist soweit richtig, sie braucht nur noch eine Spalte name, falls sie die nicht hat. Die Verbindung durch die fahrer_id besteht schon, also fehlt nur noch ein JOIN im SQL Query. Zuerst werden bei der Anfrage also beide Tabellen zusammengezogen und dann die notwendigen Informationen abgerufen.

SELECT * FROM fahrtenbuch INNER JOIN user ON fahrtenbuch.fahrer_id=user.fahrer_id ORDER BY id

Im ResultSet kannst du danach auf alle Spalten zugreifen, die es in beiden Tabellen gibt.

0
LetsDance2001 08.10.2016, 09:12
@regex9

Ok, der letzte Satz war wirklich ein wenig doof formuliert. Hat aber auch ein Wort gefehlt :D

Also ja, die Tabelle users hat bereits eine Spalte vorname.

Mein PHP Code sieht jetzt so aus. Glaube das ist falsch :D

<?php 

$statement = $pdo->prepare("SELECT * FROM fahrtenbuch ORDER BY id");
$statement = $pdo->prepare("SELECT * FROM fahrtenbuch INNER JOIN users ON fahrtenbuch.fahrerid=users.id ORDER BY id");
$result = $statement->execute();
$count = 1;
while($row = $statement->fetch()) {
echo "";
echo "".$count++."";
echo "".$row['fahrerid']."";
echo "".$row['start']."";
echo "".$row['ziel']."";
echo "".$row['frachtart']."";
echo "".$row['gefkm']." KM";
echo "".$row['verdienst']." €";
echo "";
}
?>

Und ich sehe jetzt gerade, dass er ja die beiden ID's vergleicht. Aber gibt er dann auch den Namen aus?

0
regex9 08.10.2016, 17:50
@LetsDance2001

Also zum einen benötigst du nur den zweiten SQL Query, zum anderen gibt er dir den Namen natürlich nicht aus, da du ihn auch nicht aus dem ResultSet ausliest.

Folgendes fehlt:

echo $row['vorname'];

Die Stringkonkatenationen kannst du dir im Übrigen sparen, du bekommst eh Strings aus dem Array zurück.

Des Weiteren reicht in so einem Fall:

"".$row['verdienst']." €"

folgendes:

$row['verdienst']."€"

Statt einer while-Schleife würde ich vermutlich sogar eine for-Schleife verwenden.

Nochmal bezüglich des ID-Vergleichs:

Der INNER JOIN verknüpft 2 Tabellen miteinander, d.h. es wird ein kartesisches Produkt erzeugt. Dabei muss ein Wert in beiden Tabellen gleich sein. In diesem Fall ist das die ID.

0

Was möchtest Du wissen?