Antworten auf deine Fragen:
Neues Thema erstellen

MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden?

sphinxxx

Noch nicht viel geschrieben

Hallo,

hänge schon wieder mit meiner Webseite fürs Studium fest, google und google und komme nicht weiter. Hoffe, dass ihr helfen könnt!?:)

Beispiel:

Ich habe zwei Tabellen "Staedte" und "Anreise". In der Tabelle "Stadte" werden unter dem Spaltennamen "Stadt" alle europäischen Großstädte aufgelistet und haben in der Spalte "ID" logischerweise unterschiedliche IDs. In der Tabelle "Anreise" werden in der Spalte "Transport" verschiedene Verkehrsmittel aufgeführt, mit denen die Städte erreichbar sind. Hier gibt es zwei ID-Spalten, einmal die Spalte "Verkehrsmittel_ID" (in der Bus, Bahn, Flugzeug etc.) fortlaufende IDs haben, und die Spalte "ID" (gleiche Bezeichnung wie in der Tabelle "Staedte"), in der die Verkehrsmittel als Anreisemöglichkeit den jeweiligen Städten zugeordnet werden. Also:

Tabelle "Staedte":

ID | Stadt
1 | Barcelona
2 | Mailand
3 | Berlin
4 |Lissabon
etc.

Und jetzt die Spalten der Tabelle "Transport":

Verkehrsmittel_ID | Verkehrsmittel | ID
1 | Bus | 1
2 | Bahn | 1
3 | Flugzeug | 1
4 | Schiff | 1
etc.

Ist vielleicht etwas unsinnig, aber als Beispiel soll es genügen.

Ich möchte jetzt, dass auf meiner Webseite in der Tabellenzelle neben der Stadt Barcelona alle vier Verkehrsmittel untereinander aufgelistet werden, mit denen Barcelona erreichbar ist, also Bus, Bahn, Flugzeug und Schiff.

Mit dem folgenden Script erreiche ich zwar die Ausgabe aller Spalten, jedoch wird in einer Tabellenzeile immer nur ein einziges Verkehrsmittel Barcelona zugeordnet (z.B. "Bus"). Dann wiederholt sich die Zeile mit Barcelona, und daneben wird das zweite Verkehrsmittel angezeigt ("Bahn") etc.

Hier ein Auszug aus meinem Script:

PHP:
 <?php
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
if (!$result) {
etc.
}
while ($row = mysql_fetch_array($result)) {
echo '<tr><td>' . $row['Stadt'] . '</td>';
echo '<td>' . $row['Transport'] . '</td></tr>';
etc.
?>

Danke euch schon mal für eure Hilfe und Anregungen.

Viele Grüße,

Lara
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Erstens: in deinem Beispiel wechseln die Bezeichnungen und Zuordnungen. Ich nehme an, "Anreise" = "Transport".

Zweitens: die Anreise-Tabelle sieht für mich wie ein Fehler im Entwurf aus. Wahrscheinlich soll sie ausdrücken, mit welchem Verkehrsmittel man in welche Stadt kommt. Da jede Stadt mit mehreren (1 oder mehr) Verkehrsmitteln erreicht werden kann und jedes Verkehrsmittel mehrere (1 oder mehr) Städte erreichen kann, ist das eine n:m-Relation. Diese wird in der Regel mit zwei regulären - und einer Hilfstabelle gelöst. Ergo solltest du eine Tabelle für die Städte, eine für die Verkehrsmittel und eine Hilfstabelle für die Anreisemöglichkeiten haben.

Drittens, zu deinem Problem: du prüfst nirgendwo irgendetwas ab. PHP kann nicht erraten, wie am Ende die Daten ausgegeben werden sollen. Du musst bei jedem Schleifendurchgang abgleichen ob du diese Stadt bereits ausgegeben hast. Falls ja, erzeugst du stattdessen eine leere Zelle.


Duddle
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hi AO, hi Duddle,

danke für die schnellen Antworten. Mit JOIN habe ich es schon in allen Varianten versucht. Da kommt letztlich dasselbe raus wie jetzt. Denke, dass - wie Duddle schreibt - die Zuordnungen über PHP zu treffen sind (IDs ermitteln und dann zuordnen??). Please help!

Danke und Gruß,

Lara
 

holgermerz

Nicht mehr ganz neu hier

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hi sphinxxx,

mittel INNER JOIN kannst du das gewünschte Ergenbis ausgeben

SELECT s.Stadt, t.Verkehrsmittel

FROM Staedte s
INNER JOIN Transport t
ON s.ID=t.ID

ORDER BY s.Stadt

Der ORDER BY ist optional. Gibt das Ergebnis sortiert nach "Stadt" aus.
 

Duddle

Posting-Frequenz: 14µHz

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Erkläre deiner Oma dein Problem, dann hast du den Algorithmus: "Okay, also ich habe eine Tabelle mit zwei Spalten. In jeder Zeile möchte ich schauen, ob ich die erste Spalte schon kenne; falls nein, will ich sie mir merken und A machen, ansonsten will ich B machen."

In Code:
"Okay, also ich habe eine Tabelle mit zwei Spalten."
PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
"In jeder Zeile"
PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
while ($row = mysql_fetch_array($result)) {
}
" möchte ich schauen, ob ich die erste Spalte schon kenne"
PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
while ($row = mysql_fetch_array($result)) {
  if($row['Stadt'] == $letzteBekannteStadt) {
  }
}
"falls nein, will ich sie mir merken und A machen"
PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
while ($row = mysql_fetch_array($result)) {
  if($row['Stadt'] == $letzteBekannteStadt) {
  } else {
    $letzteBekannteStadt = $row['Stadt'];
    //A
  }
}
"ansonsten will ich B machen"
PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
while ($row = mysql_fetch_array($result)) {
  if($row['Stadt'] == $letzteBekannteStadt) {
    //B
  } else {
    $letzteBekannteStadt = $row['Stadt'];
    //A
  }
}

In A gibst du Stadt und Transportmittel aus, in B nur letzteres.

Achtung, diese Lösung geht von einer sortierten Ausgabe der Städte aus (kein Barcelona, Berlin, Barcelona). Falls du das nicht willst, müsstest du ein Array einführen in dem du dir bekannte Städte merkst.


Duddle
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Danke erst mal für die ausführlichen Erläuterungen. Nur so lerne ich. Prima!

Allerdings ist das Problem weder mit dem INNER JOIN noch mit Duddles Vorschlag gelöst. In der Ausgabe wiederholen sich die Städte je nach Anzahl der zugeordneten Verkehrsmittel, und dann wird in jeder Tabellenzeile pro Stadt immer nur ein Verkehrsmittel zugeordnet (siehe Problemdarstellung oben).

Habt ihr noch eine andere Idee?

Verzweifelte Grüße,

Lara

P.S.: Bin übrigens absolute Anfängerin in Sachen PHP uns SQL - mit meinem Videotraining bin ich über die Basics noch nicht hinaus... - Daher bitte so einfach wie möglich erklären. Danke.
 

Duddle

Posting-Frequenz: 14µHz

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Willst du
A)
zS4TF.png

oder
B)
jwymT.png



Duddle
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hi Duddle,

sehe, du hast mich voll verstanden! Freu!

Ich hätte gern B).

Wie geht das?

Grüße,

Lara
 

Paric

von allem ein bisschen

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hallo Lara,

das ist dann jetzt wohl eher eine Frage von HTML-Kenntnissen, als von PHP-Kenntnissen. Den PHP-Code hat Dir Duddle ja im Prinzip schon gepostet. kombinierst du das ganze noch mit Deinem HTML-Code, würde das ca. so aussehen:

PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
while ($row = mysql_fetch_array($result)) {
  if($row['Stadt'] == $letzteBekannteStadt) {
    echo "<td>&nbsp;</td><td>" . $row['Transport'] . "</td>";
  } else {
    $letzteBekannteStadt = $row['Stadt'];
    echo "</tr><tr><td>" . $row['Stadt'] . "</td><td>" . $row['Transport'] . "</td>";
  }
Gruß,
Paric
 

Gilligan2k10

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hi,

@Paric leider nicht ganz getroffen. In deinem Beispiel würden die ergenisse so aussehen

Stadt | 1.Verkehrsmittel| | 2.Verkehrsmittel| | 3. Verkehrsmittel.....

um das ganze in die von Lara gewünschte Form zu bringen ist auch bei bereits bekannten Städten ein "Zeilenumbruch" erforderlich.

Möglichkeit A neue Tabellenzeile
PHP:
$result = @mysql_query('SELECT * FROM Staedte, Anreise WHERE Staedte.ID=Anreise.ID');
while ($row = mysql_fetch_array($result)) {
  if($row['Stadt'] == $letzteBekannteStadt) {
    echo "</tr><tr><td></td><td>" . $row['Transport'] . "</td>";
  } else {
    $letzteBekannteStadt = $row['Stadt'];
    echo "</tr><tr><td>" . $row['Stadt'] . "</td><td>" . $row['Transport'] . "</td>";
  }

Möglichkeit B ein Array erzeugen und erst dann die Tabelle erstellen wenn die Jeweils eine Tabellenzeile vollständig ist. Wird dann zwar der größere Umbau ist aber meiner Meinung nach etwas Sauberer, grade um auch die Border zu Nutzen.
mfG
 

Duddle

Posting-Frequenz: 14µHz

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Man öffne am Anfang des While-Schleifen-Körpers eine Tabellenzeile und schließe sie vor dem Ende des While-Schleifen-Körpers. Jeder Schleifendurchgang steht für sich aus schon für eine Zeile, also packt man sie auch so ein.


Duddle
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hi,

bin am Probieren mit euren Vorschlägen, doch wird immer folgender Fehler abgezeigt:

Notice: Undefined variable: letzteBekannteStadt in C:\xampp\htdocs\staedte\index.php on line 130

Habe dann probiert, die Variable

PHP:
$letzteBekannteStadt = $row['Stadt'];

zusätzlich vor die if-Anweisung zu setzen, der Fehler aber bleibt. Hier erst der normale Code:

PHP:
<?php
$result = @mysql_query('SELECT weiter wie gehabt...');
if (!$result) {
exit('<p>Fehler bei der Ausführung der Abfrage: ' . mysql_error() . '</p>');
}
while ($row = mysql_fetch_array($result)) {
if($row['Stadt'] == $letzteBekannteStadt) {
echo "</tr><tr><td></td><td>" . $row['Transport'] . "</td>";
} else {
$letzteBekannteStadt = $row['Stadt'];
echo "</tr><tr><td>" . $row['Stadt'] . "</td><td>" . $row['Transport'] . "</td>";
}
etc.

Hier mit der Variablen:

PHP:
<?php
$result = @mysql_query('SELECT weiter wie gehabt...');
if (!$result) {
exit('<p>Fehler bei der Ausführung der Abfrage: ' . mysql_error() . '</p>');
}
while ($row = mysql_fetch_array($result)) {
$letzteBekannteStadt = $row['Stadt'];
if($row['Stadt'] == $letzteBekannteStadt) {
echo "</tr><tr><td></td><td>" . $row['Transport'] . "</td>";
} else {
$letzteBekannteStadt = $row['Stadt'];
echo "</tr><tr><td>" . $row['Stadt'] . "</td><td>" . $row['Transport'] . "</td>";
}
etc.

Sagt es bitte nett, wenn ich mich zu doof anstelle :uhm:...

Danke und Grüße,

Lara
 

Duddle

Posting-Frequenz: 14µHz

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Das ist nur ein Notice, kein Error/Fehler. Grund: $letzteBekannteStadt ist nicht initialisiert, aber das muss nicht sein. Falls dich das stört, wirf ein
PHP:
$letzteBekannteStadt = "";
vor die while-Schleife. Der Rest ist dann wie von Paric zusammengefasst plus das erwähnte Tabellen-Markup:
PHP:
echo "<table>"
while ($row = mysql_fetch_array($result)) {
  echo "<tr>";

  if($row['Stadt'] == $letzteBekannteStadt) {
    echo "<td>&nbsp;</td><td>" . $row['Transport'] . "</td>";
  } else {
    $letzteBekannteStadt = $row['Stadt'];
    echo "<td>" . $row['Stadt'] . "</td><td>" . $row['Transport'] . "</td>";
  } 

  echo "</tr>";
}
echo "</table>";


Duddle
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Dank, Dank, Dank!! Klappt hervorragend!

Nur hätte ich euch besser nicht verschweigen sollen, dass ich noch andere Spalten aus der Datenbank ausgeben will. Durch die while-Schleife wiederholen sich nun die anderen Datensätze entsprechend der Anzahl der Verkehrsmittel. Schätze, ich muss eine weitere if-Anfrage einfügen oder die Schleife an der entsprechenden Stelle unterbrechen (sofern das mit der while-Schleife überhaupt geht?)

Für euch alle noch einen schönen Abend!

Viele Grüße,

Lara
 

Paric

von allem ein bisschen

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Hallo Mr. Automeschaniker,

Danke für Ihr Hilfe, das klopfem in im Motor ist jetzt weg. Aber was ist mit dem Blinker meines Anhängers zu Hause? Der geht immernoch nicht. Ich weiss, ich hab Ihnen das nicht erzählt, aber der muss ja auch in Ordnung gebracht werden...

Ich hoffe Du weisst worauf ich hinnaus will? :D
Versuch einfach mal den Codeschnipsel zu verstehen, und einen Überblick zu bekommen warum es das macht, was es machen soll. Dann sollte es kein Problem für dich sein Ihn zu erweitern. Wie Duddle es so schön erklärt hatte... Erzähle Deinem Problem Deiner Omi, und setze den Code Schritt für Schritt zusammen...

Falls es dennoch Probleme gibt, weisst Du ja wo Du uns findest ;)

Gruß,
Paric
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Verstehe schon, was ihr meint. Gebe mir auch alle Mühe mitzudenken. Wäre ich beim Einbinden weiterer Spalten, deren Zeilen nur einmal ausgegeben werden sollen, mit != auf dem richtigen Weg? Habe diesbezüglich Verschiedenes probiert, klappt aber nicht.


Vielleicht müsste ich dazu erst mal verstehen, was die Variable $letzteBekannteStadt im Script eigentlich wirklich bewirkt?


Grüße,


Lara
 

Paric

von allem ein bisschen

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

Die Varialbe macht genau das was der Name sagt...

Sie merkt sich die letzte Stadt, dessen Städtenamen du ausgegeben hast, und und schaut ob das nächste Verkehrsmittel noch zu der Stadt zählt oder halt nicht.

Also vereinfacht gesagt...

Mit dem Zug nach Berlin....
in der Variable steht jetzt Berlin....
Nun wird im nächsten Schleifendurchgang kontrolliert ob bei dem Durchlauf der Bus wieder nach Berlin fährt. Ja?, dann schreibe nur Bus auf, und lasse die Spalte "Stadt" frei.
Wenn nicht, dann schreibe in die Spalte Stadt "Hamburg" und merke dir in der Varialbe $letzteBekannteStadt "Hamburg" für den nächsten Schleifendurchlauf.
 

sphinxxx

Noch nicht viel geschrieben

AW: MYSQL und PHP: Zwei Tabellen - Gleiche IDs - Wie Datensätze miteinander verbinden

thanx für die Erklärung. Habe das Ganze dann skizziert, und siehe: Es kam die Erleuchtung:)

Geklappt hat es dann so:

PHP:
wie oben.......
if($row['Stadt'] != $letzteBekanteStadt){
echo "<th colspan='2'>" . $row['Neue_Tabellenspalte'] . "</th>";
etc.

Grüße,

Lara
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.616
Beiträge
1.538.358
Mitglieder
67.536
Neuestes Mitglied
QuestionMark
Oben