다양한 열 이름을 사용하여 MySQL에서 교차표를 동적으로 만드는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-28 08:09:01
원래의
254명이 탐색했습니다.

How to Dynamically Create Cross-Tabulations in MySQL with Varying Column Names?

MySQL 동적 교차표

문제:

" 방법', '중지', '시간' 등이 있습니다. 목표는 이 데이터를 교차표 형식으로 변환하는 것입니다. 여기서 열은 고유한 "방향" 값을 나타내고 행은 "중지" 값을 나타냅니다. 각 셀에는 해당 "길" 및 "정지" 조합에 대해 기록된 최대 "시간"이 포함됩니다.

동적 솔루션:

MySQL의 제한 사항으로 인해 열 이름과 번호가 지정됩니다. 쿼리 실행 중에 수정되어야 합니다. 이 문제를 극복하려면 두 가지 애플리케이션 기반 접근 방식을 고려하십시오.

옵션 1: 고유 값 쿼리

  • SELECT DISTINCT 쿼리를 사용하여 고유한 "방향" 값 검색 .
  • 필요한 MAX(IF()) 절을 SELECT 목록에 추가하여 피벗 쿼리를 동적으로 구성합니다.
  • 생성된 피벗 쿼리를 실행하여 원하는 교차표 결과를 얻습니다.

옵션 2: 행별 처리

  • 간단한 SELECT * 쿼리를 사용하여 행별로 데이터를 쿼리합니다.
  • "stop"을 키로 저장하고 "way" 값의 배열과 해당 "time" 값을 값으로 저장하는 연관 배열을 만듭니다.
  • 각 행을 처리하여 연관된 "stop"에 way_n 값을 채웁니다. " 키 배열.

구현:

옵션 1의 경우:

$way_array = [];
foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
  $way = (int) $row["way"];
  $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) .
   "FROM `MyTable` GROUP BY `stop`";
$pivotstmt = $pdo->query($pivotsql);
로그인 후 복사

옵션 2의 경우:

$stoparray = [];
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
  $stopkey = $row["stop"];
  if (!array_key_exists($stopkey, $stoparray)) {
    $stoparray[$stopkey] = ["stop"=>$stopkey];
  }
  $waykey = "way_" . $row["way"];
  $stoparray[$stopkey][$waykey] = $row["time"];
}
로그인 후 복사

위 내용은 다양한 열 이름을 사용하여 MySQL에서 교차표를 동적으로 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿