>  기사  >  데이터 베이스  >  MySQL에서 각 메뉴의 상위 5개 메뉴 항목을 검색하는 방법은 무엇입니까?

MySQL에서 각 메뉴의 상위 5개 메뉴 항목을 검색하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 19:44:02806검색

How to Retrieve the Top 5 Menu Items for Each Menu in MySQL?

MySQL을 사용하여 각 카테고리의 상위 5개 메뉴 항목 반환

MySQL 데이터베이스에는 'menus' 테이블에 '필드가 있습니다. menuid' 및 'profileName', 'itemid', 'name' 및 'menuid' 필드가 있는 'menuitems' 테이블. '메뉴' 테이블의 각 메뉴에 대해 상위 5개 메뉴 항목을 검색하려고 합니다.

시도한 접근 방식 중 하나에서 오류가 발생했습니다.

SELECT m.profilename, name
FROM menus m 
WHERE (SELECT name
        from menuitems s
        where m.menuid = s.menuid
        limit 5)

그러나 오류는 하위 쿼리가 둘 이상의 행을 반환합니다. 이를 극복하기 위해 부작용을 일으키는 변수를 사용할 수 있습니다. 수정된 솔루션은 다음과 같습니다.

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

이 쿼리에서는 부작용 변수 @g 및 @r을 사용하여 현재 메뉴 이름(profileName)과 메뉴 내 위치(행 번호)를 추적합니다. 메뉴. CASE 문은 각 새 메뉴에 대해 위치가 1에서 시작하고 후속 메뉴 항목에 대해 증가하도록 보장합니다. 마지막 WHERE 절은 위치 번호가 가장 낮은 상위 5개 행을 필터링합니다.

위 내용은 MySQL에서 각 메뉴의 상위 5개 메뉴 항목을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.