2011-09-10 5 views
1

기본적으로 나는 테이블에 많은 데이터를 가지고 있으며 생성 날짜도 함께 가지고있다. 나는 테이블의 모든 데이터를 보여주고 싶지만, 출력에서는 날짜 순서대로 작성해야하고, 그 위에 생성 된 달 제목이 있어야합니다.월별로 그룹화 된 mysql 테이블의 데이터 표시

1월 데이터 1 데이터 2 데이터 3

2월 DATA4 data5

data6 data7 내지 data8 data9

하나의 쿼리로 가능합니까? 나는 PHP와 MySQL을 사용하고있다.

감사

테이블 레이아웃 뭔가처럼 될 것입니다 : 그것은 순간에 모든 이론

ID | Type | Content | User | Colour | Creation Date 

,하지만 난 그것을 나중에 오늘과 내일을 만드는 것입니다. 나는 그것이 가능한지 알 필요가 있었다.

+0

테이블 레이아웃은 무엇입니까? – CodeCaster

+0

네,하지만 테이블 정의를 보는 것이 도움이 될 것입니다. 그에 따라 질문을 편집 할 수 있습니까? – Lars

답변

2

다음에

SELECT *, MONTH(thedate) AS month FROM thetable ORDER BY thedate; 

을 PHP :

$lastmonth = ""; 
while ($row = mysql_fetch_assoc($queryresult)) 
{ 
    if (empty($lastmonth)) { $lastmonth = $row['month']; } 

    if ($lastmonth != $row['month']) 
    { 
    $lastmonth = $row['month']; 
    // print new month header 
    } 

    // print row 
} 
0

스키마에 MONTH 열을 추가하고 생성 날짜부터 채 웁니다. 이 작업을 수행하려면 두 개의 열이 필요합니다.

트랜잭션 기능이있는 것보다보고 기능처럼 들립니다. 이 솔루션은 OLAP 데이터베이스의 기록 레코드를 시간 차원의보고 스타 스키마로 옮기면 쉽게 사용할 수 있습니다. OLAP 데이터 세트의 크기도 줄일 수 있습니다.

단순히 쿼리에 달 추가 날짜별로 쿼리를 주문하고 출력 단계에서 달을 추적하고 새로운마다 제목을 달이 변경 삽입 할 것
1
$res = mysql_query('SELECT MONTHNAME(creation_date) AS month_name, data_name 
        FROM my_table ORDER BY creation_date'); 
$currentMonth = null; 
while($row = mysql_fetch_assoc($res)) { 
    if($currentMonth !== $row['month_name']) { 
     echo '<h1>'.$row['month_name'].'</h1>'; 
     $currentMonth = $row['month_name']; 
    } 
    echo '<p>'.$row['data_name'].'</p>'; 
} 
관련 문제