>  Q&A  >  본문

동적 열 MySQL 피벗 테이블 쿼리

<p>저는 다음 표를 사용하여 제품 데이터를 저장합니다. </p> <pre class="brush:php;toolbar:false;">mysql> SELECT * FROM product; +---------------+---------------+-------+ | 아이디 | 설명 | +---------------+---------------+-------+ | 1 | 제품1 | 5 | | 2 | 제품2 | 5 | +---------------+---------------+-------+ mysql> SELECT * FROM product_additional; +------+----------------+ | ID | 필드값 | +------+----------------+ 1 |사이즈 | 1 | 높이 | 2 |사이즈 | 2 | 2 | 색상 | +-----------------+----------------+</pre> <p>두 테이블 모두에서 레코드를 선택하려면 다음 쿼리를 사용하세요</p> <pre class="brush:php;toolbar:false;">mysql> p.id ,p.이름 , p.설명 ,MAX(IF(pa.fieldname = 'size', pa.fieldvalue, NULL)) as `size` ,MAX(IF(pa.fieldname = 'height', pa.fieldvalue, NULL)) as `height` ,MAX(IF(pa.fieldname = 'color', pa.fieldvalue, NULL)) as `color` 제품 p에서 LEFT JOIN product_additional AS pa ON p.id = pa.id GROUP BY p.id +---------------+---------------+---------+-------- -+---------+ | 아이디 | 이름 | 크기 | +---------------+---------------+---------+-------- -+---------+ | 1 | 제품1 | S | | 2 | 제품2 | L | +---------------+---------------+---------+-------- -+---------+</pre> <p>다 괜찮습니다 :) </p> <p>"추가" 테이블을 동적으로 채우고 있으므로 쿼리도 동적이면 좋을 것입니다. 이렇게 하면 새 필드 이름과 필드 값을 입력할 때마다 쿼리를 변경할 필요가 없습니다. </p>
P粉262113569P粉262113569419일 전412

모든 응답(2)나는 대답할 것이다

  • P粉604848588

    P粉6048485882023-08-28 16:02:00

    내 접근 방식은 허용되는 답변과 약간 다릅니다. 이렇게 하면 기본 제한이 1024자인 GROUP_CONCAT 사용을 피할 수 있습니다. 이는 제한을 변경하지 않는 한 필드가 많은 경우 작동하지 않습니다.

    으아악

    데모를 보려면 여기를 클릭하세요

    회신하다
    0
  • P粉495955986

    P粉4959559862023-08-28 10:33:43

    MySQL에서 이를 동적으로 수행하는 유일한 방법은 준비된 명령문을 사용하는 것입니다. 여기에 대한 훌륭한 기사가 있습니다:

    동적 피벗 테이블(행을 열로 변환)

    귀하의 코드는 다음과 같습니다:

    으아악

    데모

    보기

    참고: GROUP_CONCAT 함수의 길이 제한은 1024자입니다. 매개변수 group_concat_max_len 보기

    회신하다
    0
  • 취소회신하다