Rumah > pangkalan data > tutorial mysql > 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
Lepaskan: 2024-11-06 04:25:02
asal
741 orang telah melayarinya

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

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 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan