2011-01-18 16 views
5

Chcę móc zwrócić 5 menuitem na menu. Wypróbowałem ten skrypt, ale nie miałem szczęścia. tutaj są tabelemySQL Zwracanie top 5 każdej kategorii

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

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

Oto, co mam teraz. Otrzymuję komunikat o błędzie z poniższym skryptem. Błąd: Podzapytanie zwraca więcej niż 1 wiersz.

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

Wszelkie sugestie są bardzo cenne.

Odpowiedz

13

Musisz użyć zmiennych ubocznych wpływających na ten

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

Dziękuję bardzo! Utknąłem na tym od wielu dni. – user281867

+0

WOW ... wybór zmiennych wejściowych w zapytaniu ... Nigdy wcześniej tego nie widziałem ... Dziwne, ale fajne. – DRapp

+0

To jest fantastyczne. – Devgeeks

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

Czy zakładając, że ma '' menuitems' menuid' w tabeli? – VoodooChild

+3

mysql nie obsługuje "TOP N". – nos

Powiązane problemy