2011-01-18 43 views
5

我希望能夠返回每個菜單5個菜單項。我已經嘗試了這幾個腳本,但沒有運氣。這裏是表格mySQL返回每個類別的前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) 

任何建議是非常感謝。

回答

13

你必須使用方影響的變量此

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 
-3
SELECT TOP 5 m.profilename, s.name 
FROM menus m INNER JOIN menuitems s ON m.menuID = s.menuid 
+0

你假定他在`menuitems`表`menuid`? – VoodooChild 2011-01-18 21:54:09

+3

mysql不支持「TOP N」。 – nos 2011-01-18 22:13:59