Menunjukkan Pendekatan Jadual Maya/Sementara SQL: Mengekstrak Data daripada Tatasusunan Bersekutu
P粉066224086
2023-09-03 16:26:28
<p>Saya memerlukan pertanyaan SQL mudah untuk memaparkan jadual maya/sementara tanpa menciptanya dalam pangkalan data. </p>
<p>Saya menggunakan PHP untuk mencipta rentetan pertanyaan dengan data. </p>
<p>Kod PHP semasa saya ialah: </p>
<pre class="brush:php;toolbar:false;">$array = [
['id' => 1, 'nama' =>
['id' => 2, 'nama' =>
['id' => 3, 'nama' =>
];
$subQuery = "PILIH {$array[0]['id']} AS col1, '{$array[0]['name']}' AS col2";
untuk ($i=1; $i < count($array); $i++) {
$subQuery .= " KESATUAN SEMUA PILIH {$array[$i]['id']}, '{$array[$i]['name']}'"
}
$sql = "DENGAN cte AS
(
{$subQuery}
)
PILIH col1, col2 DARI cte;";
echo $sql;</pre>
<p>Outputnya ialah: </p>
<pre class="brush:php;toolbar:false;">WITH cte AS
(
PILIH 1 SEBAGAI kol1, 'satu' AS kol2 KESATUAN SEMUA PILIH 2, 'dua' KESATUAN SEMUA PILIH 3, 'tiga'
)
PILIH col1, col2 DARI cte;
// Jadual output daripada SQL
col1 col2
1 satu
2 dua
3 tiga</pra>
<p>Saya mendapat idea untuk pertanyaan ini dari sini. </p>
<p>Tetapi masalah dengan pertanyaan ini ialah jika terdapat 100 data dalam $array, bahagian <strong>UNION ALL</strong> akan disertakan 100 kali dalam SQL. Saya tidak fikir ini adalah SQL yang lebih baik kerana ia seperti menyertai 100 jadual pada masa yang sama. </p>
<p>Saya juga boleh mencipta jadual sementara (<strong>BUAT JADUAL SEMENTARA nama_jadual</strong>) sebagai ganti klausa <strong>WITH</strong> ini, tetapi itu bukan satu pertanyaan kerana saya Pertanyaan lain diperlukan untuk memasukkan rekod ke dalam jadual sementara. </p>
<p>Bolehkah sesiapa membantu saya memudahkan pertanyaan ini dengan cara yang lebih baik? </p>
Apabila anda menggunakan MySQL 8, anda boleh menggunakan
json_table
ungkapan seperti ini:PHP editor dalam talian
Dalam MySQL 8.0, keputusan pertanyaan di atas adalah seperti berikut: