Hallo,
-
Ich habe folgendes Problem:
Habe ne Datenbank in der gibt es ein paar Tabellen, für uns sind nur 2 wichtig:
die Tabelle: StellenHotel
und die Tabelle: StellenOrt
In der StellenHotel Tabelle stehen Hotelnamen drinnen z.b. "Bachdad Hotel" "Hotel Löwen"...
In der StellenOrt Tabelle stehen die einzelnen Orte der Hotels drinnen. Diese sind über eine ID referenziert.
Ich will nun folgende Ausgabe im Browser haben:Hotelname
HotelOrt
Hotelname
HotelOrt
Hotelname
HotelOrd
....
Ich habe jedoch ein wenig Probleme mit der Realisierung mit den while Schleifen.
Mein Code sieht so aus und erbringt mir folgendes Ergebnis:Hotel
Feldkirch
Götzis
Röthis
Klaus
Feldkirch
Hohenems
Test2
Burgrund Bachdad Hotel
BaladaHotel
Hotel Löwen
Hotel Bären
Hotel PfannerWie man sieht wird erst 1 Hotelname ausgegeben, dann ALLE Ort und dann die RESTLICHEN Hotels. Der Code sieht so aus:
<?php include ("condb.php"); //Alle Hotels in der DB ausgeben $sql = 'SELECT * FROM StellenHotel'; $all = mysql_query($sql); if (mysql_num_rows($all) == 0) { echo 'Keine Datensätze gefunden<br>'; } //Alle Hotelorte aus der DB lesen $sql2 = 'SELECT * FROM StellenOrt'; $all2 = mysql_query($sql2); if (mysql_num_rows($all2) == 0) { echo 'Keine Datensätze gefunden<br>'; } //Hier werden die Hotels and den Browser gesendet while ($row = mysql_fetch_assoc($all)) { while ($row = mysql_fetch_assoc($all2)) { echo $row["Ort"].'<br>'; } } echo $row[0]; mysql_close(); ?>
Ich hoffe jemand kann mir die Schleifen richtig stellen, hab schon seit 2 Stunden versucht das Ding zu lösen...
Danke für die Hilfe
-
Du brauchst keine ineinander verschachtelte while-Schleifen.
while ($hotels = mysql_fetch_assoc($all) and $orte = mysql_fetch_assoc($all2)) { echo $hotels["Name?"]."<br>"; echo $orte["Ort"].'<br>'; }
Soetwa in die richtung sollte es aussehen, wobei ich deinen
code nicht wirklich verstehe (naja PHP halt)
-
Der Code ist falsch, da er sich darauf verlässt, dass Hotels und Orte in der Datenbank in einer festen Reihenfolge vorliegen. Praktisch tun sie das i.d.R. nicht, und falls doch, dann nicht für lange.
In der Tabelle müssen die Hotels und die Orte verknüpft weren; dafür nimmt man i.d.R. eine ID-Spalte (INT oder BIGINT). Jedes Hotel enthält dann eine Spalte "ortId", mit der der Ort eindeutig bestimmt werden kann.
Die SQL-Abfrage verknüpft die beiden Tabellen dann enstprechend:
SELECT * FROM orte, hotels WHERE hotels.ortId = ort.ortId
Dadurch erspart man sich eine Abfrage, bringt die Tabellen in Relation und gibst die in einer einfachen Iteration aus.
-
immer so viel wie möglich die datenbank machen lassen
denn die ist meistens schneller als anderer code