2011-09-15 5 views
3

하루에 모든 레코드를 그룹화하는 쿼리가 있습니다. 내가 그것을 할 때까지 레코드가없는 경우에도, 모든 일이 나에게 보여 그렇게 어떻게MySQL/PHP GROUP BY 일

$query = mysql_query("SELECT DATE_FORMAT(date, '%d/%m/%Y') AS day, COUNT(id) AS total FROM invoices GROUP BY day"); 

오늘

Omerimuni

당신이 일 테이블을하지 않는 한이 작업을 수행 할 수있는 방법이 없다

답변

0

. 당신은 그것에 합류 할 수 있습니다.

0

원칙적으로 모든 요일을 포함하는 새로운 테이블을 생성 할 수 있습니다. 그런 다음이 테이블을 일에 "송장"에 가입 시키 셨습니다.

그러나 내 제안은 대신 PHP에서이 논리를 처리하는 것입니다.

+0

내가 몇 가지 예를 가질 수 있습니다. 나는 그 순간을 이해할 수 없다. – Omerimuni

1

필자는 테이블의 모든 레코드를 날짜순으로 정렬하고 PHP를 사용하여 갭을 채우는 것이 가장 좋습니다.

MySQL에서 날짜 시퀀스를 생성하기가 어렵습니다. here과 같은 저장 프로 시저 및 임시 테이블을 가진 솔루션을 자주 볼 수 있습니다.

PHP에서 오늘까지 각 날짜를 거치는 루프를 만듭니다. 루프에서 쿼리 결과에 날짜가 있으면 각 레코드를 확인할 수 있습니다. 그렇지 않으면 빈 행이나 원하는 것을 렌더링 할 수 있습니다.

이 검사는 날짜별로 쿼리의 결과를 정렬하므로 너무 비싸지 않으므로 현재 레코드가 루프의 현재 날짜와 동일한 날짜인지 확인해야합니다. 레코드의 날짜가 더 길면이 레코드를 아직 처리하지 않아야합니다. 날짜가 같으면 레코드를 처리하고 다음 레코드를 가져옵니다.

1

아마이 최선의 해결책이 아니라 내가 직접했다 : D

$result = mysql_query("SELECT date_format(date, '%Y-%m-%d') AS date FROM invoices ORDER BY id ASC LIMIT 1"); 
    $first = mysql_fetch_array($result); 

    $year = date('Y', strtotime($first['date'])); 
    $month = date('m', strtotime($first['date'])); 
    $day = date('d', strtotime($first['date'])); 


    for ($i = strtotime($year.'-'.$month.'-'.$day); $i < strtotime('NOW'); $i=$i+24*60*60){ 
     $r = date('d/m/Y',$i); 
     $res = mysql_query("SELECT DATE_FORMAT(date, '%d/%m/%Y') AS day, COUNT(id) AS total FROM invoices WHERE DATE_FORMAT(date, '%d/%m/%Y') LIKE '%$r%' GROUP BY day"); 
     $arr = mysql_fetch_array($res); 

     if(mysql_num_rows($res)){ 
      echo "".$arr['day']."&nbsp;=>&nbsp;".$arr['total']."<br>"; 
     }else{ 
      echo date('d/m/Y',$i)."=>&nbsp; 0<br>"; 
     } 
    }