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 중국어 웹사이트의 기타 관련 기사를 참조하세요!