Demonstration des SQL-Ansatzes für virtuelle/temporäre Tabellen: Extrahieren von Daten aus einem assoziativen Array
P粉066224086
2023-09-03 16:26:28
<p>Ich benötige eine einfache SQL-Abfrage, um eine virtuelle/temporäre Tabelle anzuzeigen, ohne sie in der Datenbank zu erstellen. </p>
<p>Ich verwende PHP, um eine Abfragezeichenfolge mit Daten zu erstellen. </p>
<p>Mein aktueller PHP-Code ist: </p>
<pre class="brush:php;toolbar:false;">$array = [
['id' => 1, 'name' =>
['id' => 2, 'name' =>
['id' => 3, 'name' =>
];
$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 = "WITH cte AS
(
{$subQuery}
)
SELECT col1, col2 FROM cte;";
echo $sql;</pre>
<p>Die Ausgabe ist: </p>
<pre class="brush:php;toolbar:false;">WITH cte AS
(
SELECT 1 AS col1, 'one' AS col2 UNION ALL SELECT 2, 'two' UNION ALL SELECT 3, 'drei'
)
SELECT col1, col2 FROM cte;
// Ausgabetabelle aus dem SQL
Spalte1 Spalte2
1 Eins
2 zwei
3 drei</pre>
<p>Die Idee zu dieser Abfrage kam mir hier. </p>
<p>Das Problem bei dieser Abfrage besteht jedoch darin, dass bei 100 Daten im $array der <strong>UNION ALL</strong>-Teil 100 Mal in die SQL aufgenommen wird. Ich glaube nicht, dass dies ein besseres SQL ist, weil es so ist, als würde man 100 Tabellen gleichzeitig verknüpfen. </p>
<p>Anstelle dieser <strong>WITH</strong>-Klausel könnte ich auch eine temporäre Tabelle erstellen (<strong>CREATE TEMPORARY TABLE table_name</strong>), aber das wäre keine einzelne Abfrage, da ich Um Datensätze in die temporäre Tabelle einzufügen, ist eine weitere Abfrage erforderlich. </p>
<p>Kann mir jemand helfen, diese Abfrage besser zu vereinfachen? </p>
当您使用MySQL 8时,可以使用
json_table
表达式,如下所示:PHP在线编辑器
在MySQL 8.0中,上述查询的结果如下: