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 Pfanner

    Wie 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


Anmelden zum Antworten