2012-10-03 3 views
1

OK, I는 다음과 같습니다 판매 테이블이 :MySQL의 또는 PHP는 행을 열로 켜기 동적

Prod_ID | Store_ID | Date_Sold | Num_Sold 

105  | 1010  | 2012-09-21 | 50 
105  | 1011  | 2012-09-22 | 20 
105  | 1012  | 2012-09-22 | 35 
............................................ 
109  | 1010  | 2012-09-21 | 25 
109  | 1011  | 2012-09-23 | 15 
109  | 1012  | 2012-09-23 | 30

나는이처럼 보이는 새 테이블 또는 뷰 만들고 싶습니다 :

Store_ID | 105 | ... | 109 

1010  | 50 | ... | 25 
1011  | 20 | ... | 15 
1012  | 35 | ... | 30

나는 이것을 수행하는 방법을 잘 모르겠습니다. 나는 사람들이 이것을 하드 코딩하는 곳을 보았지만 50 개가 넘는 Prod_ID가 있고 그것들이 끊임없이 변하기 때문에 나는 그렇게하고 싶지 않습니다. 이것을 동적으로 수행 할 수있는 방법이 있습니까? 나는이 데이터를 PHP를 통해 웹 페이지에 표시 할 것이므로 PHP를 사용하는 더 쉬운 방법이있을 것입니다. ?? 이 설명이 불분명한지 알려주세요.

미리 감사드립니다.

+1

데이터베이스를 쿼리하고 정보를 HTML 테이블에 출력하면됩니까? –

+0

다음과 같은 유형의 문제가 여기에 설명되어 있습니다. http://stackoverflow.com/questions/12598120/mysql-pivot-table-query-with-dynamic-columns – Thomas

답변

2

MySQL에서는 prepared statement에서 PIVOT까지의 데이터를 사용해야합니다. MySQL의이 PIVOT 기능을 가지고 있지 않기 때문에, 당신은 CASE와 함께 집계 함수를 사용해야합니다 : 당신이 열 알려진 번호를 가지고 있다면

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'sum(case when Prod_ID = ''', 
     Prod_ID, 
     ''' then Num_Sold end) AS ''', 
     Prod_ID, '''' 
    ) 
) INTO @sql 
FROM yourtable; 

SET @sql = CONCAT('SELECT store_id, ', @sql, ' 
        FROM yourtable 
        GROUP BY store_id'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

SQL Fiddle with Demo

를 참조하십시오, 당신은 보나 것 이와 유사 코드 값 : 그래서 위의보기 일이다

select store_id, 
    sum(case when prod_id = 105 then Num_Sold end) as '105', 
    sum(case when prod_id = 109 then Num_Sold end) as '109' 
from yourtable 
group by store_id 

SQL Fiddle with Demo

+0

감사합니다. bluefeet! 이것은 내가 원하는 것입니다. 이 방법을 사용하여 PHP에서 테이블 헤더를 어떻게 인쇄 할 수 있는지 알고 있습니까? 몇 가지 방법을 시도했지만 올바르게 작동하지는 않습니다. – user1504583

+0

@ user1504583 테이블 헤더가 무슨 뜻입니까? – Taryn

+0

HTML에서 새 테이블을 만들 때 테이블 머리글이나 열 이름에 태그를 사용합니다. 첫 번째 행이 필요합니다. 이 방법을 사용하면 테이블 헤더를 클릭하여 정렬 스크립트를 사용하여 특정 제품의 최대/최소를 구입할 수 있습니다. – user1504583

1

참조 MySQL의 출력. PHP를 사용하면 원하는대로 데이터를 배치 할 수 있으며 문제를 해결할 수 있습니다. 당신은 반복 행을 테이블 (html은 레이아웃, php는 반복)으로 만들고 그 테이블은 PHP를 통해 호출 된 MySQL 구문의 출력을 넣습니다.

MySQL 연결 (PHP) 설정과 물론 테이블 레이아웃 (HTML)을 위해이 코드를 작성하는 것이 좋습니다.