Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Dapatkan Item Terbaru daripada Berbilang Kategori Menggunakan Pertanyaan SQL Tunggal?
Pertanyaan SQL Tunggal untuk Mendapatkan Kembali Item Terkini daripada Pelbagai Kategori
Artikel ini membentangkan penyelesaian SQL yang cekap untuk mendapatkan semula item terbaharu merentas berbilang kategori menggunakan pertanyaan pangkalan data tunggal, meminimumkan panggilan pangkalan data.
Penyelesaian SQL: Memanfaatkan Sambungan Luar
Masalah "terhebat-n-per-kumpulan" diselesaikan dengan elegan menggunakan sambungan luar:
<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(i2.item_id) < 4;</code>
Pertanyaan ini cekap memilih item dengan kurang daripada empat item baharu dalam kategori masing-masing.
Penjelasan:
Pertanyaan itu menggabungkan setiap item (i1
) dengan item lain (i2
) dalam kategori yang sama yang mempunyai item_id
yang lebih tinggi (bermaksud ia lebih baharu). Fasal HAVING
menapis item dengan tiga atau lebih item baharu, meninggalkan hanya empat item terbaharu bagi setiap kategori.
Kelebihan:
Pendekatan Alternatif:
Kaedah ini menggunakan pembolehubah takrif pengguna MySQL untuk menetapkan nombor baris dan mengenal pasti empat item terbaharu bagi setiap kategori. (Pendekatan ini kurang mudah alih berbanding kaedah sambung luar).
MySQL 8.0.3 menyokong fungsi tetingkap SQL standard, memberikan penyelesaian yang lebih ringkas:
<code class="language-sql">WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id DESC) AS rownum FROM item ) SELECT * FROM numbered_item WHERE rownum <= 4;</code>
Pendekatan ini membahagikan item mengikut kategori, menetapkan nombor baris berdasarkan item_id
(dalam susunan menurun untuk yang terbaharu dahulu), dan kemudian memilih empat baris teratas daripada setiap partition.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Item Terbaru daripada Berbilang Kategori Menggunakan Pertanyaan SQL Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!