Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengembalikan 5 Item Teratas dalam Setiap Kategori dalam MySQL: Mengendalikan Ralat Subkueri?

Bagaimana untuk Mengembalikan 5 Item Teratas dalam Setiap Kategori dalam MySQL: Mengendalikan Ralat Subkueri?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 04:25:02576semak imbas

How to Return the Top 5 Items in Each Category in MySQL: Handling Subquery Errors?

Cara Mengembalikan 5 Item Teratas dalam Setiap Kategori dalam MySQL

Memulangkan bilangan rekod yang terhad daripada setiap kategori adalah keperluan biasa dalam aplikasi pangkalan data. Dalam kes khusus untuk mengembalikan 5 item menu teratas setiap menu, cabaran timbul disebabkan oleh subkueri yang mengembalikan berbilang baris untuk setiap menu, yang membawa kepada ralat "Subquery mengembalikan lebih daripada 1 baris".

Untuk mengatasi ini isu, pendekatan biasa adalah menggunakan pembolehubah kesan sampingan. Berikut ialah pertanyaan yang diperbetulkan yang menangani ralat:

SELECT profilename, name
FROM
(
    SELECT m.profilename, s.name,
        @r:=case when @g=m.profilename then @r+1 else 1 end r,
        @g:=m.profilename
    FROM (select @g:=null,@r:=0) n
    cross join menus m 
    left join menuitems s on m.menuid = s.menuid
) X
WHERE r <= 5

Memecahkan pertanyaan:

  1. Pembolehubah Kesan Sampingan: @r dan @g adalah sebelah -mempengaruhi pembolehubah yang digunakan untuk menjejaki kategori semasa dan bilangan rekod yang dikembalikan untuk kategori tersebut.
  2. Permulaan: Kami memulakan @g dan @r kepada null dan 0, masing-masing, menggunakan subquery.
  3. Gelung pada Kategori: Kami menggunakan cantuman silang antara jadual menu dan n untuk menggelungkan setiap profil menu.
  4. Kumpulan dan Rekod Kategori Kiraan: Bagi setiap kategori, kami mengira nombor baris (r) menggunakan pernyataan kes. Jika kategori semasa berbeza daripada yang sebelumnya, kami menetapkan semula r kepada 1; jika tidak, kami menambahnya sebanyak 1.
  5. Kemas kini Kumpulan Kategori: Kami mengemas kini @g ke profil kategori semasa untuk menjejaki kategori semasa.
  6. Memilih 5 Teratas: Akhir sekali, kami memilih nama profil dan nama hanya jika bilangan rekod r adalah kurang daripada atau sama dengan 5.

Dengan menggunakan pembolehubah kesan sampingan, pertanyaan ini memastikan ia mengembalikan paling banyak 5 rekod untuk setiap kategori, menyelesaikan ralat asal.

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan 5 Item Teratas dalam Setiap Kategori dalam MySQL: Mengendalikan Ralat Subkueri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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