2011-01-18 18 views
5

Quiero poder devolver 5 elementos de menú por menú. Probé este guión pero no tuve suerte. aquí están las tablasmySQL Devolver los 5 primeros de cada categoría

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

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

Aquí lo que tengo ahora. Recibo el mensaje de error con el script a continuación. Error: Subquery devuelve más de 1 fila.

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

Cualquier sugerencia es muy apreciada.

Respuesta

13

usted tiene que utilizar las variables que afectan secundarios para este

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

¡Muchas gracias! He estado atrapado en esto por días. – user281867

+0

WOW ... selección de variables en línea en una consulta ... Nunca había visto eso antes ... Extraño, pero genial. – DRapp

+0

Eso es fantástico. – Devgeeks

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

¿Está asumiendo que tiene '' menuid' en la tabla menuitems'? – VoodooChild

+3

mysql no es compatible con "TOP N". – nos

Cuestiones relacionadas