2011-01-18 9 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 
+1

बहुत बहुत धन्यवाद! मैं इस पर अटक गया हूँ दिनों के लिए। – user281867

+0

वाह ... एक क्वेरी में इनलाइन चर का चयन ... मैंने पहले कभी नहीं देखा है ... अजीब, लेकिन शांत। – DRapp

+0

यह शानदार है। – Devgeeks

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

के लिए पक्ष प्रभावशाली चर का उपयोग करने के लिए आपको लगता है कि वह 'menuitems' तालिका में' menuid' है यह सोचते हैं? – VoodooChild

+3

mysql "TOP N" का समर्थन नहीं करता है। – nos

संबंधित मुद्दे