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:
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
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
}
}
}
}
Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt

Vielen Dank für's Lesen.
dha
Kommentar