SQL 가상/임시 테이블 접근 방식 시연: 연관 배열에서 데이터 추출
P粉066224086
2023-09-03 16:26:28
<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>
MySQL 8을 사용하는 경우 다음과 같은
으아악json_table
표현식을 사용할 수 있습니다.PHP 온라인 편집기
MySQL 8.0에서 위 쿼리의 결과는 다음과 같습니다.
으아악