我正在mySql表中为每个预订创建一行预订系统。这一行包含三列:早上,下午和晚上。
reservation_id | date | morning | afternoon | evening
int(255) | d/t | 1/0 | 1/0 | 1/0
使用以下GUI,用户可以为三个不同的部分添加或减少更多或更少的项目:
我正在尝试重新编写数字的任何可能设置(> 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
//答复 桌子上的每一排都是一条船。在主要概览中,每排包含预订或上午,下午或晚上的同一条船的三排是很奇怪的。
答案 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,甚至可以辩论它。