Menunjukkan Pendekatan Jadual Maya/Sementara SQL: Mengekstrak Data daripada Tatasusunan Bersekutu
P粉066224086
P粉066224086 2023-09-03 16:26:28
0
1
419

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 tiga 

Saya 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?

P粉066224086
P粉066224086

membalas semua (1)
P粉781235689

Apabila anda menggunakan MySQL 8, anda boleh menggunakanjson_tableungkapan seperti ini:

 1, 'name' => 'one'], ['id' => 2, 'name' => 'two'], ['id' => 3, 'name' => 'three'] ]; $data = json_encode($array); $sql = "SELECT tbl.* FROM JSON_TABLE( '{\"data\":$data}', '$.data[*]' COLUMNS ( id VARCHAR(40) PATH '$.id', name VARCHAR(100) PATH '$.name') ) tbl"; echo $sql;

PHP editor dalam talian

Dalam MySQL 8.0, keputusan pertanyaan di atas adalah seperti berikut:

+====+=======+ | id | name | +====+=======+ | 1 | one | +----+-------+ | 2 | two | +----+-------+ | 3 | three | +----+-------+
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!