无法弄清楚php中的算法

时间:2010-12-03 20:02:01

标签: php mysql

我正在mySql表中为每个预订创建一行预订系统。这一行包含三列:早上,下午和晚上。

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

可以在mysql表中转换为(三个+一个+两个=)6行。但将输入转换为三行会更好:

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

有人可以帮我写这个算法吗? 先感谢您! [R

//答复 桌子上的每一排都是一条船。在主要概览中,每排包含预订或上午,下午或晚上的同一条船的三排是很奇怪的。

4 个答案:

答案 0 :(得分: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)");
}

答案 1 :(得分: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--;
}

答案 2 :(得分: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;
}

答案 3 :(得分:0)

现代计算机和现代数据库如此之快,你真的不需要担心重复。使用最简单的表示而不是具有最少行的表示。你不需要担心行数,直到你达到1,000,000,甚至可以辩论它。