SQL 가상/임시 테이블 접근 방식 시연: 연관 배열에서 데이터 추출
P粉066224086
P粉066224086 2023-09-03 16:26:28
0
1
559
<p>데이터베이스에 가상/임시 테이블을 생성하지 않고 표시하려면 간단한 SQL 쿼리가 필요합니다. </p> <p>저는 PHP를 사용하여 데이터가 포함된 쿼리 문자열을 생성하고 있습니다. </p> <p>현재 PHP 코드는 다음과 같습니다. </p> <pre class="brush:php;toolbar:false;">$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;</pre> <p>출력은 다음과 같습니다.</p> <pre class="brush:php;toolbar:false;">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</pre> <p>여기서 이 검색어에 대한 아이디어를 얻었습니다. </p> <p>그러나 이 쿼리의 문제점은 $array에 100개의 데이터가 있으면 <strong>UNION ALL</strong> 부분이 SQL에 100번 포함된다는 것입니다. 동시에 100개의 테이블을 조인하는 것과 같기 때문에 이것이 더 나은 SQL이라고 생각하지 않습니다. </p> <p>이 <strong>WITH</strong> 절 대신 임시 테이블(<strong>CREATE TEMPORARY TABLE table_name</strong>)을 생성할 수도 있지만 이는 단일 쿼리가 아닙니다. 임시 테이블에 레코드를 삽입하려면 또 다른 쿼리가 필요합니다. </p> <p>이 쿼리를 더 나은 방법으로 단순화하는 데 도움을 줄 수 있는 사람이 있습니까? </p>
P粉066224086
P粉066224086

모든 응답(1)
P粉781235689

MySQL 8을 사용하는 경우 다음과 같은 json_table 표현식을 사용할 수 있습니다.

으아악

PHP 온라인 편집기

MySQL 8.0에서 위 쿼리의 결과는 다음과 같습니다.

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