Zwei gleiche queries, zwei unterschiedliche Verarbeitungen –_wie lösen?

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

  • Zwei gleiche queries, zwei unterschiedliche Verarbeitungen –_wie lösen?

    Hallo zusammen,

    ich habe ein kleines Problem, für das ich im Moment keine Lösung finde:

    Ich möchte eine Seite mit gruppierten Fragenblöcken und vorgegebenen Antwortmöglichkeiten generieren.

    Zum Datenbank-Modell (MySQL):

    pk = primary key
    fk = foreign key

    Tabelle Fragebogen:
    - pk_fragebogen
    - name

    Tabelle FBFragen:
    - pk_FBFrage
    - frage
    - auswahlart
    - sort
    - fk_Werteliste
    - fk_Fragebogen

    Tabelle Wertelisten:
    - pk_Wertliste
    - name

    Tabelle WertelistenWerte
    - pk_WLW
    - fk_Werteliste

    Eine Seite soll also so aussehen:

    3. Kategorie
    3.1. Sub
    Über-Frage
    Frage --------- ja, nein, vllt (radio)
    Frage --------- ja, nein, vllt (radio)
    ...
    4. Kategorie 2
    4.1.
    Über-Frage
    Frage --------- sehr oft, weniger oft, nie (radio)
    Frage --------- sehr oft, weniger oft, nie (radio)

    Nun zu meinem eigentlichen Problem:

    Ich muss aus Layoutgründen alle Fragen eines Blocks auf einmal ausgeben. Derzeit mache ich einen mysql_query und gehe dann jede row nacheinander durch. Problem dabei ist, dass auch die Überschriften (z.B. "3.1. bla") in der FBFragen-Tabelle stehen (mit auswahlart = 'header') und somit die Trennung der einzelnen "Blöcke" darstellen (weil sortiert nach feld 'sort')

    Gehe ich das Resultset (mysql_fetch_row) durch, erhalte ich erst die "header-Fragen", gebe diese aus und komme dann zur ersten "radio-Frage". Diese müsste ich nun, samt allen anderen, zum ersten header gehörenden Fragen ausgeben (Schleife in der großen Schleife).
    Bin ich nun aber wieder am Anfang der ersten Schleife, gehe ich erst zur zweiten "radio-Frage" (die schon ausgegeben wurde).
    Ich müsste also den Array-Pointer zum nächsten Block setzen.

    Hier ein bisschen Code:


    PHP-Code:
    for($i 0;$row mysql_fetch_row($Fragen); $i++) {
            
        
    $frage    $row[0];
        
    $wl$row[2];
        
    $auswahlArt=$row[3];
            

            if(
    $auswahlArt == "header") {
               
                
    //header ausgeben

           
    } elseif ($auswahlArt == "radio") { //radio 
                
                
    $Werte mysql_query("SELECT * FROM WLWerte WHERE fk_WL = ".$wl);

                  for (
    $i 0$row mysql_fetch_row($Werte); $i++) {
                         
    // Werteliste im entsprechenden Design ausgeben mit kleiner for-Schleife                   
                  
    }      
                    
                
    // Fragen ausgeben
                
    $Fragen mysql_query("SELECT d_frage, _pk_FBF, fk_WL, d_AuswahlArt, d_Sort FROM FBFragen WHERE d_Seite = ".$page." AND fk_FB = 2 ORDER BY d_Sort");
                for (
    $i 0$row mysql_fetch_row($Werte); $i++) {
                         
    // Fragen im entsprechenden Design ausgeben mit kleiner for-Schleife       
                    
    if($type != "radio") {
                        
    $continue $sort// ab diesem Sort muesste ich im naechsten Durchlauf der groszen Schelife weitermachen 
                        
    break; // Kleine Schleife beenden
                    
    }
                }
          }

    Im Prinzip habe ich ja zweimal die gleiche Abfrage (Große Schleife, kleine "fragen ausgeben"-Schleife), weiß aber derzeit nicht wie ich das anders angehen soll.

    Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt

    Vielen Dank für's Lesen.

    dha
    Zuletzt geändert von dha; 19.08.2007, 16:25.

  • #2
    Bitte lies unsere Regeln und brich deinen Code entsprechend um. Danke.

    PHP-Code:
    for($i 0;$row mysql_fetch_row($Fragen); $i++) {
        
    $Fragen mysql_query(...);

    Wundert mich gar nicht, dass du damit Probleme hast.

    Leider habe ich deine Ausführungen dazu nicht ganz verstanden.
    Wenn dir GROUP BY nicht hilft, dann sammle die einzelnen Blöcke doch erstmal in einem Array. Auf die Weise kannst du erstmal alle Überschriften aus der DB holen ($block[$i]['headline'] = $row[...]), dann alle Fragen und alle Antworten, egal in welcher Reihenfolge sie im Resultset auftauchen.

    Kommentar

    Lädt...
    X