데이터베이스에 가상/임시 테이블을 생성하지 않고 표시하려면 간단한 SQL 쿼리가 필요합니다.
저는 PHP를 사용하여 데이터가 포함된 쿼리 문자열을 생성하고 있습니다.
현재 PHP 코드는 다음과 같습니다.
$array = [ ['id' => 1, '이름' => ['id' => 2, '이름' => ['id' => 3, '이름' => ]; $subQuery = "SELECT {$array[0]['id']} AS col1, '{$array[0]['name']}' AS col2" for ($i=1; $i < count($array); $i++) { $subQuery .= " UNION ALL SELECT {$array[$i]['id']}, '{$array[$i]['name']}'" } $sql = "cte AS 사용" ( {$하위 쿼리} ) SELECT col1, col2 FROM cte;'quot; echo $sql;
출력은 다음과 같습니다.
Cte AS 사용 ( SELECT 1 AS col1, 'one' AS col2 UNION ALL SELECT 2, 'two' UNION ALL SELECT 3, '3' ) cte에서 col1, col2 선택; // SQL의 출력 테이블 열1 열2 1개 2 2 3 3
여기서 이 검색어에 대한 아이디어를 얻었습니다.
그러나 이 쿼리의 문제점은 $array에 100개의 데이터가 있으면 UNION ALL 부분이 SQL에 100번 포함된다는 것입니다. 동시에 100개의 테이블을 조인하는 것과 같기 때문에 이것이 더 나은 SQL이라고 생각하지 않습니다.
이 WITH 절 대신 임시 테이블(CREATE TEMPORARY TABLE table_name)을 생성할 수도 있지만 이는 단일 쿼리가 아닙니다. 임시 테이블에 레코드를 삽입하려면 또 다른 쿼리가 필요합니다.
이 쿼리를 더 나은 방법으로 단순화하는 데 도움을 줄 수 있는 사람이 있습니까?
MySQL 8을 사용하는 경우 다음과 같은
으아악json_table
표현식을 사용할 수 있습니다.PHP 온라인 편집기
MySQL 8.0에서 위 쿼리의 결과는 다음과 같습니다.
으아악