Menunjukkan Pendekatan Jadual Maya/Sementara SQL: Mengekstrak Data daripada Tatasusunan Bersekutu
P粉066224086
P粉066224086 2023-09-03 16:26:28
0
1
543
<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>
P粉066224086
P粉066224086

membalas semua(1)
P粉781235689

Apabila anda menggunakan MySQL 8, anda boleh menggunakan json_table ungkapan seperti ini:

<?php
$array = [
    ['id' => 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