2010-12-03 47 views
0

mySqlテーブルで予約ごとに1行の予約システムを作成しています。この列には、午前、午後、夕方の3つの列があります。以下のGUIを使用することでPHPでアルゴリズムを見つけることができません

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

ユーザーが加算または減算することができます多かれ少なかれ項目三つの異なる部分について:

example-row

私は(すべての可能な設定を書き直すしようとしています> 0)を予約テーブルのできるだけ少ない行に減らします。例えば :

morning | afternoon | evening 
3  | 1   | 2 

は(3 + 1 + 2 =)MySQLのテーブル内の6行に変換することができます。誰かが私には、このアルゴリズムを記述するのに役立つ可能性があり

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

:?しかし、3行に、この入力を変換するよりよいだろうか ありがとうございます! R

//返信 テーブルの各行はボートです。主な概要には、各列の予約が入っている同じボートの3行、朝、午後、または夕方が含まれているのが奇妙です。擬似コードで

+1

これはどのように優れていますか?データの永続性が、少量の領域を節約するために可読性を犠牲にするように思われる。なぜ値3,1、および2(データ型を変更すると思われます)の行が1つもありません。 – David

答えて

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

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

関連する問題