Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memilih Item Terkini setiap Kategori dengan Cekap dalam SQL?

Bagaimanakah Saya Boleh Memilih Item Terkini setiap Kategori dengan Cekap dalam SQL?

DDD
Lepaskan: 2025-01-22 02:10:09
asal
980 orang telah melayarinya

How Can I Efficiently Select the Latest Items per Category in SQL?

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>
Salin selepas log masuk

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:

  • Kendalikan sebarang bilangan kategori dengan mudah
  • Tidak akan terjejas oleh pengubahsuaian kategori
  • Boleh mengendalikan kategori dengan bilangan item yang berbeza

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan