2012-12-21 1 views
4
나는 다음과 같은 데이터가

.결합 순차적 기간 내 표가 결합 된 시프트 날짜에 원하는 <code>shift_id</code>에 기초</p> <p><img src="https://i.stack.imgur.com/z037l.jpg" alt="table data"></p> <p>에서

은 한마디로 나는 다음과 같은 출력을 원하는 :

**output format : FromDate To ToDate (Shift_id)** 

2012-12-01 To 2012-12-02 (2) 

2012-12-03 (1) 

2012-12-04 (2) 

2012-12-18 To 2012-12-20 (1) 

2012-12-21 To 2012-12-22 (2) 

2012-12-23 To 2012-12-24 (1) 

2012-12-25 To 2012-12-30 (2) 

내가 일하지만 행운의 커플을 시도했다. 어느 누구도이 문제를 해결하기 위해 나를 도와주세요.

는이 코드

while($row_shift = mysql_fetch_object($result_shift)) { 
    $new_date = $row_shift->shift_date; 
    $new_shift = $row_shift->shift_id; 
    if($new_shift !== $old_shift) { 
     $shift_name = $new_shift; 
     $shift_date_1 = date('D d M',strtotime($new_date))." (".$shift_name.")";    
    } else { 
     $shift_name = $old_shift; 
     $shift_date_1 = date('D d M',strtotime($old_date))." (".$shift_name.")"; 
     $diff = abs(floor((strtotime($new_date) - strtotime($old_date))/3600/24)); 
     if($diff == 1) {      
      $to_part = ' To '; 
      $shift_date_2 = date('D d M',strtotime($new_date))." (".$shift_name.")"; 

     } else { 
      $to_part = ' To '; 
      $shift_date_2 = date('D d M',strtotime($old_date))." (".$shift_name.")";  
     } 
    } 

    $s_d_2 = $to_part.$shift_date_2; 

    $shift_date[] = $shift_date_1.$s_d_2; 

    $old_date = $row_shift->shift_date; 
    $old_shift = $row_shift->shift_id; 

} 
echo implode("<br/>", $shift_date); 

이 코드의 출력을 썼다

Output : 
Sat 01 Dec (2) 
Sat 01 Dec (2) To Sun 02 Dec (2) 
Mon 03 Dec (1)Sun 02 Dec (2) 
Tue 04 Dec (2)Sun 02 Dec (2) 
Tue 18 Dec (1)Sun 02 Dec (2) 
Tue 18 Dec (1) To Wed 19 Dec (1) 
Wed 19 Dec (1) To Thu 20 Dec (1) 
Fri 21 Dec (2)Thu 20 Dec (1) 
Fri 21 Dec (2) To Sat 22 Dec (2) 
Sun 23 Dec (1)Sat 22 Dec (2) 
Sun 23 Dec (1) To Mon 24 Dec (1) 
Tue 25 Dec (2)Mon 24 Dec (1) 
Tue 25 Dec (2) To Wed 26 Dec (2) 
Wed 26 Dec (2) To Thu 27 Dec (2) 
Thu 27 Dec (2) To Fri 28 Dec (2) 
Fri 28 Dec (2) To Sat 29 Dec (2) 
Sat 29 Dec (2) To Sun 30 Dec (2) 

덕분이다. 여기

+0

, 당신이 –

+0

시도 것을이 루프를 사용하여 매우 편리합니다. 데이터베이스에서 날짜를 잡고 for 또는 foreach 루프에서 반복하십시오. –

+0

@SashiKant 제 질문을 업데이트했습니다. –

답변

3

는 문제를 직면하고 어디 있는지 설명해야 SQLFiddle demo

select min(shift_date) start_data,max(shift_date) end_date, 
      min(Shift_id) Shift_id 
from 
(
select t.*,if(shift_id<>@CurShift,@i:[email protected]+1,@i) Group_num, 
     @CurShift:=shift_id 
from t, (select @CurShift:=0,@i:=0) t1 
order by shift_date 
) b 

group by Group_num 
order by Group_num 
+0

감사합니다. @valex .. –

+0

안녕하세요 valex, 귀하의 질문을 이해하려고합니다. 설명해 주시겠습니까? –

관련 문제