Verschachtelte while-Schleifen, Alternative ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verschachtelte while-Schleifen, Alternative ?

    Huhu ;-)!

    Steh grad irgendwie aufm Schlauch.

    Bin grad dabei 'n kleines Browsergame zu basteln um in PHP nicht einzurosten.

    Folgendes...

    Ich hab 2 Tabellen, user_buildings und buildings.

    user_buildings
    user_id | b_id | lvl
    9 | 1 | 1
    9 | 3 | 1

    buildings
    id | b_name | b_descr
    1 | Erzmine | Die Erzmine....
    2 | Sägewerk | Das Sägewerk....
    3 | Ölförderpumpe | Die Ölförderpumpe....

    (b_id entspricht den Gebäude-ID's)

    Bei der Gebäudeübersicht will ich jetzt alle Gebäude (aus Tabelle buildings) ausgeben, ist ja kein Problem. Dazu will ich dann aber auch noch einen Link zum weiteren Gebäudeausbau generieren, wenn das Gebäude mind. schon eine Stufe ausgebaut wurde (erst dann wird nämlich ein Eintrag in die user_buildings gemacht), und da liegt mein Problem.

    Ich habe momentan 2 Queries. Eine liest die Tabelle buildings aus, die andere die Daten aus user_buildings.
    Mit mysql_num_rows überprüfe ich dann, ob ein Datensatz aus user-Buildings ausgelesen wurde, wenn nicht, wurde nie was gebaut und ich kann alleGebäude und Links, zum bauen auf Stufe 1, ausgeben.
    Wenn etwas aus user_buildings ausgelesen wurde, erstelle in der while-Schleife, eine weiter, die die Ergebnisse in ein Array packt und dann überprüft, ob b_id mit der id des Gebäudes übereinstimmt, wenn ja, dann wird der Link zum Ausbau ausgegeben. Da liegt dann mein Problem...

    PHP-Code:
    <?php
    while($building mysql_fetch_assoc($buildRes)) {

    //unwichtig...
            
            
    while($userBuilding mysql_fetch_assoc($userBuildingRes)) {
                    if(
    $building['id'] == $userBuilding['b_id']) {
                        echo 
    "Stufe " . ($userBuilding['lvl'] + 1) . " Bauen";
                    } else {
                        echo 
    "Bauen";
                    } 
                
            }
    //unwichtig...

    }
    ?>
    Kann ja nicht funktionieren
    Hab es auch mit break; in der "inneren" while-Schleife versucht...

    Dachte erst an JOIN, aber da hab ich ja nur die Möglichkeit mir die Datensätze ausgeben zu lassen, die mit b_id übereinstimmen ... oder alle die mit b_id nicht übereinstimmen. Richtig ?

    Bei Google und Co bin ich auch gescheiert, finde keine passenden Keywords :-/

    Mach ich es mit kompliziert ? oder ist meine DB-Struktur einfach für 'n A.... Hintern ?

    Danke schonmal!

    MfG
    starr

  • #2
    LEFT JOIN?
    Hab jetzt den Post nicht ganz gelesen (weil mein Essen wartet und der ist definitiv zu lang um ihn vorher noch zu lesen), aber hört sich nach der richtigen Lösung an ^^, (oder zumindest in die Richtung)

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Du kannst
      - in einer Schleife alle Gebäude in ein Array einlesen mit der GebäudeId als Key
      - dann in einer weiteren Schleife (die nicht innerhalb der ersten ist), alle user-Building-Level auslesen, und die in ein weiteres Array tun, wieder mit der GebäudeID als key
      - Schließlich mit foreach alle Buildings abklappern und überprüfen, ob der user_building_level für das Gebäude gesetzt wurde. (pseudocode: )
      PHP-Code:
      foreach($buildings as $k=>$b) {
         if (isset(
      $user_building_level[$k])){
            echo(
      $b->name " hast du auf Stufe " $user_building_level[$k] . " ausgebaut.");
         } else {
             echo(
      " du kannst " $b->name " jetzt bauen ");
         }

      (so würde ich das machen - Beispiel ungetestet)
      ich glaube

      Kommentar


      • #4
        Original geschrieben von ghostgambler
        LEFT JOIN?
        Hab jetzt den Post nicht ganz gelesen (weil mein Essen wartet und der ist definitiv zu lang um ihn vorher noch zu lesen), aber hört sich nach der richtigen Lösung an ^^, (oder zumindest in die Richtung)
        Hrhr, gudden ... *gg*

        Danke, aber die Lösung von ministry klappt wunderbar ...

        @ministry:

        Wohoo ... es funktioniert, vielen Dank

        MfG
        starr

        Kommentar

        Lädt...
        X