동적 열 MySQL 피벗 테이블 쿼리
P粉262113569
P粉262113569 2023-08-27 17:24:10
0
2
486
<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粉262113569
P粉262113569

모든 응답(2)
P粉604848588

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

으아악

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

P粉495955986

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

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

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

으아악

데모

보기

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿