Optimumkan pertanyaan SQL untuk memilih item terkini dengan cekap dalam setiap kategori
Cabaran untuk memaparkan projek terkini dalam setiap kategori dalam pangkalan data memerlukan pertanyaan SQL yang cekap. Walaupun mengulang kategori mengikut kategori dan membuat pertanyaan untuk item terkini adalah pendekatan yang mudah, adalah lebih baik untuk mengoptimumkan pertanyaan dengan mengurangkan panggilan pangkalan data.
Max-N-soalan setiap kumpulan
Tugas mengenal pasti n rekod terkini dalam kumpulan kategori dikenali sebagai masalah maks-n-per-kumpulan, yang merupakan masalah pertanyaan SQL biasa.
Penyelesaian sambungan luaran
Menggunakan sambungan luar kita boleh mendapatkan hasil yang diinginkan:
<code class="language-sql">SELECT i1.* FROM item i1 LEFT OUTER JOIN item i2 ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id) GROUP BY i1.item_id HAVING COUNT(*) < 4;</code>
Penerangan
Pertanyaan ini melakukan gabungan luar antara setiap item (i1) dan item yang lebih baharu daripadanya (i2), dengan mengambil kira item dalam kategori yang sama sahaja. Klausa COUNT(*) menentukan bilangan item yang lebih baharu untuk setiap i1. Projek dengan kurang daripada empat projek baharu menjadi calon yang layak untuk pemilihan kami.
Kelebihan
Penyelesaian ini fleksibel dan boleh disesuaikan:
Alternatif
Satu lagi penyelesaian khusus MySQL menggunakan pembolehubah pengguna:
<code class="language-sql">SELECT * FROM ( SELECT i.*, @r := IF(@g = category_id, @r+1, 1) AS rownum, @g := category_id FROM (SELECT @g:=null, @r:=0) AS _init CROSS JOIN item i ORDER BY i.category_id, i.date_listed ) AS t WHERE t.rownum <= 4;</code>
Fungsi tetingkap SQL
MySQL 8.0.3 memperkenalkan fungsi tetingkap, membenarkan satu lagi penyelesaian cekap:
<code class="language-sql">WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id) AS rownum FROM item ) SELECT * FROM numbered_item WHERE rownum <= 4;</code>
Kesimpulan
Dengan memilih kaedah pertanyaan yang sesuai berdasarkan versi MySQL khusus anda dan struktur pangkalan data, anda boleh mengoptimumkan pemilihan item terkini dalam setiap kategori dengan berkesan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Item Terkini setiap Kategori dengan Cekap dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!