Gruppenwechsel
Kalle_B
- programmiertechnik
0 King^Lully0 Kalle_B
0 King^Lully0 wahsaga
Hallöle,
bitte mal meinen Gedankengang überprüfen, ich glaube, ich mache hier etwas unnötig doppelt.
Aus der Datenbank kommen rows, die einen Gruppenwechsel auslösen können. Dann wird innerhalb der while- Schleife die alte Gruppe beendet (Summen bilden etc.) und die Zähler für die neue Gruppe zurückgesetzt.
Nach dem letzten Datensatz, also hinter der while- Schleife, muss die letzte Gruppe auch abgeschlossen werden. Ich habe den Code also doppelt mit der Gefahr, bei Änderung in der Kopie etwas zu übersehen.
Okay, ich könnte den Gruppenwechsel in eine Funktion auslagern. Unschön, weil an anderer Stelle des Source- Codes.
Gibt es sonst eine Möglichkeit. Hat etwa der letzte Satz aus mysql_fetch_array eine Markierung (oder zumindest eine Satznummer, die ich mit mysql_num_rows vergleichen könnte), bevor ich das nächste Mal ins Leere greife?
Lieben Gruß, Kalle
Okay, ich könnte den Gruppenwechsel in eine Funktion auslagern. Unschön, weil an anderer Stelle des Source- Codes.
"Gruppenwechsel" kenne ich noch aus meinen COBOL-Zeiten. "Gruppenwechsel" macht heutzztage ein RDBMS gerne selbst.
[...] , bevor ich das nächste Mal ins Leere greife?
Bevor Du sowas machst, solltest Du mal _ganz_genau_ beschreiben, was Sache ist.
"Gruppenwechsel" kenne ich noch aus meinen COBOL-Zeiten. "Gruppenwechsel" macht heutzztage ein RDBMS gerne selbst.
Vielleicht liegt hier eine Möglichkeit, die ich nicht kenne.
Bevor Du sowas machst, solltest Du mal _ganz_genau_ beschreiben, was Sache ist.
Gut, hier der PHP- Code, ich hoffe, die Kommentarzeilen machen ihn verständlich:
$arr_eventbuchungen = array();
$gruppen_id = 0;
$anz_mitglieder = 0;
$gebu_mitglieder = 0;
while ( $row_evt = mysql_fetch_array( $res_evt ))
{
if ( ( $row_evt['evb4_anz_mitglieder'] > 0 && $freie_plaetze >= $row_evt['evb4_anz_mitglieder'] )
||( $row_evt['evb4_anz_mitglieder'] == 0 && $freie_plaetze > 0 ))
{
// 2007-03-22
if ( $gruppen_id != $row_evt['bzg1_gruppen_id'] )
{
// WECHSEL DER BESUCHERGRUPPE, AUCH VON GRUPPE AUF ERSTEN EINZELBESUCHER
if ( $anz_mitglieder > $gebu_mitglieder )
{
// VORHERIGE GRUPPE NICHT KOMPLETT, WIEDER ZURUECKHOLEN
while ( $gebu_mitglieder > 0 )
{
$letzter = array_pop ( $arr_eventbuchungen );
$gebu_mitglieder--;
$freie_plaetze++;
}
}
// MERKER FUER NEUE GRUPPE SETZEN
$gruppen_id = $row_evt['bzg1_gruppen_id'];
$anz_mitglieder = $row_evt['evb4_anz_mitglieder'];
$gebu_mitglieder = 0;
}
// 1. GRUPPE, AUCH EINERGRUPPE / 2. EINZELPERSON
$arr_eventbuchungen[] = array(
'wunsch_event_id' => $row_evt['evt2_id']
,'gebuchte_event_id' => $arr_evtBuchen[$i]
,'adress_id' => $row_evt['evb1_adress_id']
,'gruppen_id' => $row_evt['bzg1_gruppen_id']
,'von_slot_nr' => $row_evt['evt1_von_slot_nr']
,'bis_slot_nr' => $row_evt['evt1_bis_slot_nr']
);
$freie_plaetze--;
if ( $gruppen_id ) $gebu_mitglieder++;
if ( $freie_plaetze == 0 ) break;
}
} // while
if ( $gruppe_id && $anz_mitglieder > $gebu_mitglieder )
{
// LETZTE GRUPPE NICHT KOMPLETT, WIEDER ZURUECKHOLEN
while ( $gebu_mitglieder > 0 )
{
$letzter = array_pop ( $arr_eventbuchungen );
$gebu_mitglieder--;
$freie_plaetze++;
}
}
Kalle
Nach dem letzten Datensatz, also hinter der while- Schleife, muss die letzte Gruppe auch abgeschlossen werden. Ich habe den Code also doppelt mit der Gefahr, bei Änderung in der Kopie etwas zu übersehen.
Ja, an solche Probleme kann ich mich erinnern. Das lässt sich aber vermeiden durch gute Code-Verteilung. Code-Redundanzen sind da nicht erforderlich - dezent formuliert.
hi,
Aus der Datenbank kommen rows, die einen Gruppenwechsel auslösen können. Dann wird innerhalb der while- Schleife die alte Gruppe beendet (Summen bilden etc.) und die Zähler für die neue Gruppe zurückgesetzt.
Wie King Lully schon sagte - zumindest solche Summierungen und ähnliches kann doch auch ein gängiges DBMS schon für dich durchführen.
Nach dem letzten Datensatz, also hinter der while- Schleife, muss die letzte Gruppe auch abgeschlossen werden. Ich habe den Code also doppelt mit der Gefahr, bei Änderung in der Kopie etwas zu übersehen.
Gibt es sonst eine Möglichkeit. Hat etwa der letzte Satz aus mysql_fetch_array eine Markierung (oder zumindest eine Satznummer, die ich mit mysql_num_rows vergleichen könnte), bevor ich das nächste Mal ins Leere greife?
Mitzählen in einer Schleife schaffst du selber - und vorher Abfragen, wie viele Datensätze im Ergbenis-Set enthalten sind, kannst du doch mit mysql_num_rows.
Okay, ich könnte den Gruppenwechsel in eine Funktion auslagern. Unschön, weil an anderer Stelle des Source- Codes.
Dieses "Problem" hättest du doch unabhängig vom konkreten Fall beim Auslagern immer - egal ob in Funktionen, include-Dateien o.ä.
gruß,
wahsaga