2014-01-12 3 views
0

나는 근무일 (월요일부터 일요일)이 근무하는 날과없는 날을 저장하는 데이터베이스 테이블을 가지고 있습니다. 이 표에는 2 가지 속성 인 "day"(월요일부터 일요일까지 1, 2, 3, 4, 5, 6, 7)과 "working"이 포함됩니다. 나는 '0'과 '1'을 사용하여 근무일인지 아닌지를 표시하고, '1'은 비 근무일임을 나타냅니다. 금요일, 토요일, 일요일에 데이터베이스가 휴무 (5, 6, 7)가되도록 설정했습니다.while 루프는 한 번만 실행되지만 한 번만 실행됩니다.

$addrange = $annstart; 
    $minusday = 0; //numbers of nonworking days 

    $resultnonworking = mysql_query("SELECT dayid FROM workingdays WHERE working='1'"); 
    while ($nonworking = mysql_fetch_array($resultnonworking)) 
    { 
     while ($datediffdays > 1) 
      { 
       $addrange = date('Y-m-d', strtotime($addrange . ' + 1 day')); 
       $daycheck = date('N', strtotime($addrange)); 
       if ($daycheck == $nonworking['dayid']) 
        { 
         $minusday = ++$minusday; 
        }    
       $datediffdays = --$datediffdays; 
      } 
     $startdaycheck = date('N', strtotime($annstart)); 
     if ($nonworking['dayid'] == $startdaycheck) 
     $minusday = ++$minusday;  
    } 

그러나 내 while 루프는 한 번만 실행되며 어느 날짜가 금요일인지, 토요일과 일요일은 제외되는지 확인합니다.

누군가 내 코드에 무엇이 잘못 되었습니까? 미리 감사드립니다.

+0

$ datediffdays는 어디에 정의되어 있습니까? – cornelb

+0

실제로 달성하고자하는이 코드는 무엇입니까? 비 근무 일수를 계산하려고합니까? 당신은 MySQL 쿼리에서'COUNT'를 사용할 수 있습니다. – SamV

+0

@cornelb 붙여 넣지 않은 코드의 상단 부분에 정의되어 있습니다. –

답변

0

바깥 쪽 루프를 사용하여 내부 루프를 전환 했으므로 약간의 변경이 있었지만 이제는 작동 중입니다. 그러나 나는 왜 그것이이 방법으로 작동하는지 모르지만 다른 방법으로는 작동하지 않습니다.

$addrange = date('Y-m-d', strtotime($annstart . ' - 1 day')); 
    $minusday = 0; //numbers of nonworking days 

    while ($datediffdays > 0) 
     { 
      $addrange = date('Y-m-d', strtotime($addrange . ' + 1 day')); 
      $checkrange = date('N', strtotime($addrange)); 
      $resultnonworking = mysql_query("SELECT * FROM workingdays WHERE working='1'"); 
      while ($nonworkingcheck = mysql_fetch_array($resultnonworking)) 
       { 
        if($nonworkingcheck['dayid'] == $checkrange) 
         { 

          $minusday = $minusday + 1; 

         } 
       } 
      $range = $range." ".$addrange; 
      $datediffdays = $datediffdays-1; 
     } 

    $range = substr($range,11); 
1

귀하의 요청에 대한 설명은 다음과 같습니다.

while ($nonworking = mysql_fetch_array($resultnonworking)) 
{ 
    while ($datediffdays > 1) 
    { 

은 첫번째 레코드를 인출하고 내부 루프를 실행 한 후 이하 후 $datediffdays까지 간다 참조. 이제 첫 번째 루프로 돌아 왔을 때 $datediffdays의 값은 이미 1보다 작으므로 두 번째 루프로 이동하지 않습니다. 이 같은 첫 번째 루프 내에서 $datediffdays를 초기화해야이 workig를 만들려면 지금의 변경으로, while 루프 내부의 기록을 fetces 후 한 번만 $datediffdays 변수의 값을 감소
while ($nonworking = mysql_fetch_array($resultnonworking)) 
{ 
    $datediffdays = 5; 
    while ($datediffdays > 1) 
    { 

루프 및 $datediffdays의 값이 루프 내부에 처음 들어 오면 1보다 작게 설정되지 않으므로 루프가 작동합니다.

모든 코드가 여기에 없으므로 어느 것이 가장 좋은 방법이 될지 제안 할 수 없습니다.

관련 문제