2010-12-03 11 views
0

Ich mache ein Reservierungssystem mit einer Zeile pro Reservierung in einer mySql-Tabelle. Diese Zeile enthält drei Spalten: Morgen, Nachmittag und Abend.Kann nicht herausfinden, Algorithmus in PHP

reservation_id | date | morning | afternoon | evening 
int(255)  | d/t | 1/0  | 1/0  | 1/0 

Mit der Verwendung der folgenden GUI kann der Benutzer mehr oder weniger Einzelteile addieren oder subtrahieren für die drei verschiedenen Teilen:

example-row

Ich versuche, jede mögliche Einstellung neu schreiben (> 0) der Zahlen so wenig wie möglich Zeilen in meiner Reservierungstabelle. Zum Beispiel:

morning | afternoon | evening 
3  | 1   | 2 

könnte (drei + ein + = zwei) umgewandelt werden 6 Zeilen in der Tabelle mysql. Aber es wäre schöner sein, um diese Eingabe in drei Reihen zu transformieren:

  | morning | afternoon | evening 
row 1  | 1  | 1   | 1 
row 2  | 1  | 0   | 1 
row 3  | 1  | 0   | 0 

Könnte jemand mir helfen, diesen Algorithmus zu schreiben? Vielen Dank im Voraus! R

// antworten Jede Zeile in der Tabelle ist ein Boot. Es ist seltsam, in der Hauptübersicht drei Reihen für ein und dasselbe Boot zu haben, in denen die Reservierung für den Morgen, den Nachmittag oder den Abend enthalten ist.

+1

Wie wäre das schöner? Es scheint, als würde die Datenpersistenz Lesbarkeit verlieren, um wenig Speicherplatz zu sparen. Warum haben Sie nicht einmal eine Zeile mit den Werten 3, 1 und 2 (Ändern der Datentypen, wie es scheint)? – David

Antwort

0
<?php 
$data = array('morning' => 3, 'afternoon' => 2, 'evening' => 1); 

for($i=0;$i<max($data);$i++) { 
    $m = ($data['morning']<=$i) ? 0 : 1; 
    $a = ($data['afternoon']<=$i) ? 0 : 1; 
    $e = ($data['evening']<=$i) ? 0 : 1; 
    mysql_query("INSERT INTO x(morning, afternoon, evening) VALUES($m, $a, $e)"); 
} 
+0

Das funktioniert super! – richardverbruggen

0

In Pseudo-Code:

while($morning > 0 || 
     $afternoon > 0 || 
     $evening > 0) 
{ 
     $thisMorning = ($morning == 0 ? 0 : 1); 
     $thisAfternoon = ($afternoon == 0 ? 0 : 1); 
     $thisEvening = ($evening == 0 ? 0 : 1); 

     insert_row ($thisMorning, $thisAfternoon, $thisEvening); 

     if ($morning > 0) $morning--; 
     if ($afternoon > 0) $afternoon--; 
     if ($evening > 0) $evening--; 
} 
0
$morn = 3; 
$aft = 2; 
$eve = 1; 

while($morn > 0 || $aft > 0 || $eve > 0) { 
    $row = array(); 
    $row['morn'] = $morn-- > 0 ? 1 : 0; 
    $row['aft'] = $aft-- > 0 ? 1 : 0; 
    $row['eve'] = $eve-- > 0 ? 1 : 0; 
    $rows[] = $row; 
} 
0

Moderne Computer und Moderne Datenbanken sind so schnell, Sie wirklich nicht brauchen, um Doppelarbeit zu kümmern. Gehen Sie mit der einfachsten Darstellung vor und nicht mit der Zeile mit den wenigsten Zeilen. Sie müssen sich keine Gedanken über die Anzahl der Zeilen machen, bis Sie 1.000.000 erreicht haben, und selbst dann ist es umstritten.

+0

Ich möchte dies nicht wegen Leistungsproblemen tun. (obwohl ich eine saubere Datenbank mag :)) Der Grund dafür ist wegen der Darstellung jeder Reihe als ein echtes physikalisches Objekt (ein Boot). – richardverbruggen

Verwandte Themen