首頁  >  文章  >  資料庫  >  如何在 MySQL 中傳回每個類別中的前 5 項:處理子查詢錯誤?

如何在 MySQL 中傳回每個類別中的前 5 項:處理子查詢錯誤?

Linda Hamilton
Linda Hamilton原創
2024-11-06 04:25:02582瀏覽

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

如何在MySQL 中傳回每個類別的前5 筆記錄

從每個類別傳回有限數量的記錄是常見的要求資料庫應用程式。在傳回每個選單前 5 個選單項目的特定情況下,由於子查詢為每個選單傳回多行,導致「子查詢傳回超過 1 行」錯誤,因此出現了挑戰。

要克服這個問題問題,常見的方法是使用副作用變數。以下是解決該錯誤的更正查詢:

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

分解查詢:

  1. 副作用變數: @r 和@g 是side - 用於追蹤目前類別以及為該類別傳回的記錄數的影響變數。
  2. 初始化:我們分別將 @g 和 @r 初始化為 null 和 0,使用子查詢。
  3. 循環類別:我們在選單表和 n 之間使用交叉聯接來循環每個選單設定檔。
  4. 類別群組和記錄計數: 對於每個類別,我們使用 case 語句計算行號 (r)。如果當前類別與前一個類別不同,我們將 r 重設為 1;否則,我們將其增加 1。
  5. 更新類別群組:我們將 @g 更新到目前類別設定檔以追蹤目前類別。
  6. 選擇前 5 個: 最後,只有當記錄計數 r 小於或等於 5 時,我們才選擇設定檔名稱和名稱。

透過利用副作用變量,此查詢確保它每個類別最多返回 5 條記錄,解決了原來的錯誤。

以上是如何在 MySQL 中傳回每個類別中的前 5 項:處理子查詢錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn