2010-12-03 57 views
0

我正在mySql表中爲每個預留一行預訂系統。該行包含三列:上午,下午和晚上。在php中無法算出算法

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

通過使用以下GUI的用戶可以添加或減去更多或更少的項目爲三個不同的部分:

example-row

我想重新寫任何可能的設置( > 0)的數字儘可能少的行放在我的預定表中。 例如:

morning | afternoon | evening 
3  | 1   | 2 

可以轉化爲(3 + +一個2 =)6行中的MySQL表。但是,這將是更好該輸入轉換成三排:

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

可能有人幫我寫這個算法? 提前謝謝! R

//回覆 表中的每一行都是一條船。在主要概述中,對於每行包含預訂或早晨,或下午或晚上的同一船,三行是很奇怪的。

+1

這會更好嗎?看起來數據持久性會犧牲可讀性來節省少量空間。爲什麼甚至沒有一個值爲3,1和2的行(改變數據類型,看起來)? – David 2010-12-03 20:08:08

回答

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

這很好用! – richardverbruggen 2010-12-03 20:43:29

0

在僞代碼:

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

現代計算機和現代數據庫是如此之快,你真的不需要擔心重複。使用最簡單的表示法,而不是使用最少行的表示法。你不必擔心行數,直到你達到1,000,000,甚至是可以辯論的。

+0

由於性能問題,我不想這樣做。 (儘管我喜歡乾淨的數據庫:))之所以會這樣,是因爲每一行的表示都是真實的物理對象(一條船)。 – richardverbruggen 2010-12-03 20:35:26