복붙노트

[SQL] MySQL은 각 카테고리의 상위 5 반환

SQL

MySQL은 각 카테고리의 상위 5 반환

나는 5 메뉴 항목 당 메뉴를 반환 할 수 있어야합니다. 나는이 몇 가지 스크립트를 시도했지만 운이 없었습니다. 여기에 테이블이 있습니다

menus
-------
menuid int()
profileName varchar(35)

menuitems
-----------
itemid int()
name varchar(40)

여기에 내가 지금 무엇을 가지고있다. 나는 아래의 스크립트 오류 메시지를 받고 있어요. 오류 : 하위 쿼리가 더 후 1 개 행 반환합니다.

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

어떤 제안이 좋은 감사합니다.

해결법

  1. ==============================

    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
    
  2. ==============================

    2.

    SELECT TOP 5 m.profilename, s.name
    FROM menus m INNER JOIN menuitems s ON m.menuID = s.menuid
    
  3. from https://stackoverflow.com/questions/4729406/mysql-returning-the-top-5-of-each-category by cc-by-sa and MIT license