cari

Rumah  >  Soal Jawab  >  teks badan

Menunjukkan Pendekatan Jadual Maya/Sementara SQL: Mengekstrak Data daripada Tatasusunan Bersekutu

<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粉066224086P粉066224086450 hari yang lalu546

membalas semua(1)saya akan balas

  • P粉781235689

    P粉7812356892023-09-04 00:48:43

    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 |
    +----+-------+

    balas
    0
  • Batalbalas