2011-01-18 26 views
5

Desidero poter restituire 5 menuitem per menu. Ho provato questo copione ma non ho avuto fortuna. ecco le tabellemySQL Restituzione dei primi 5 di ogni categoria

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

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

Ecco quello che ho adesso. Sto ricevendo il messaggio di errore con lo script qui sotto. Errore: la sottoquery restituisce più di 1 riga.

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

Qualsiasi suggerimento è molto apprezzato.

risposta

13

è necessario utilizzare le variabili che influenzano laterali per questo

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

Grazie mille! Sono stato bloccato su questo per giorni. – user281867

+0

WOW ... selezione di variabili in linea in una query ... Non l'ho mai visto prima ... Strano, ma fantastico. – DRapp

+0

Questo è fantastico. – Devgeeks

-3
SELECT TOP 5 m.profilename, s.name 
FROM menus m INNER JOIN menuitems s ON m.menuID = s.menuid 
+0

Stai assumendo che ha '' menuid' in tabella menuitems'? – VoodooChild

+3

mysql non supporta "TOP N". – nos

Problemi correlati