2010-12-03 9 views
0

mySql 테이블에서 예약 당 하나의 행으로 예약 시스템을 만들고 있습니다. 이 행에는 아침, 오후 및 저녁의 세 열이 있습니다. 다음 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 

은 (+ 세 개의 하나 + =) MySQL의 테이블 6 행으로 변환 될 수있다. 그러나이 입력을 3 행으로 변환하는 것이 더 좋을 것입니다.

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

누군가이 알고리즘을 작성하는 데 도움이 될 수 있습니까? 미리 감사드립니다. R

// 대답 테이블의 모든 행은 보트입니다. 주 요 개요에서 같은 보트의 각 행에 예약이 있거나 아침 또는 오후 또는 저녁을 포함하는 3 개의 행이있는 것은 이상합니다. 의사 코드에서

+1

어떻게하면 좋을까요? 데이터 지속성은 소량의 공간을 절약하기 위해 가독성을 희생하는 것처럼 보입니다. 왜 값 3, 1 및 2 (데이터 유형을 변경하는 것)가있는 단일 행이없는 것입니까? – 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

관련 문제