Saya memerlukan pertanyaan SQL mudah untuk memaparkan jadual maya/sementara tanpa menciptanya dalam pangkalan data.
Saya menggunakan PHP untuk mencipta rentetan pertanyaan dengan data.
Kod PHP semasa saya ialah:
$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;
Outputnya ialah:
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 tigaSaya mendapat idea untuk pertanyaan ini dari sini.
Tetapi masalah dengan pertanyaan ini ialah jika terdapat 100 data dalam $array, bahagian UNION ALL 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.
Saya juga boleh mencipta jadual sementara (BUAT JADUAL SEMENTARA nama_jadual) sebagai ganti klausa WITH ini, tetapi itu bukan satu pertanyaan kerana saya Pertanyaan lain diperlukan untuk memasukkan rekod ke dalam jadual sementara.
Bolehkah sesiapa membantu saya memudahkan pertanyaan ini dengan cara yang lebih baik?
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: