2013-03-27 4 views
6

प्रविष्टि.आईडी पर नीचे दी गई सारणी में शामिल होने से, मैं खाद्य_ब्रांड तालिका से पंक्तियों को निकालना चाहता हूं जिसमें उच्चतम टाइप_आईडी है - इसलिए मुझे नीचे शीर्ष 3 पंक्तियां मिलनी चाहिए, टाइप_आईडी 11940MySQL अधिकतम मान

के साथ

food_brands

 id  brand  type_id 
     15375 cesar  11940 
     15374 brunos  11940 
     15373 butchers 11940 
     15372 bakers  11939 
     15371 asda  11939 
     15370 aldi  11939 

प्रकार

 id  type  quantity  food_id 
     11940 comm  53453   10497 
     11939 comm  999   10496 

खाद्य पदार्थ

 id  frequency entry_id 
     10497 twice  12230 
     10496 twice  12230 
     10495 once  12230 

प्रविष्टियों

  id  number 
     12230 26 

क्वेरी पर मेरे प्रयास कम type.id रिकॉर्ड को छान नहीं है - नीचे food_brands में, मैं type_id 11940 और 11939. ग्रेटफुल के लिए उन लोगों के साथ हो रही है तालिका रिकॉर्ड से तो किसी भी मदद यह ठीक है!

SELECT fb.* 
         FROM food_brands fb 
         INNER JOIN types t ON fb.type_id = t.id 
         INNER JOIN 
         (
          SELECT MAX(id) AS MaxID 
          FROM types 
          GROUP BY id 
         ) t2 ON t.food_id = t2.food_id AND t.id = t2.MaxID 
         INNER JOIN foods f ON t.food_id = f.id 
         INNER JOIN entries e ON f.entry_id = e.id 
         WHERE entries.id = 12230 
+1

'feeding_id' क्या है ?? – didierc

+0

didierc - अच्छी तरह से देखा! अद्यतन – bsod99

उत्तर

2

तुम सिर्फ max प्रकार आईडी के साथ food_brands से पंक्तियों को वापस करना चाहते हैं, तो आप का उपयोग करने के लिए सक्षम होना चाहिए:

SELECT fb.* 
FROM food_brands fb 
INNER JOIN 
(
    select max(id) id 
    from types 
) t 
    on fb.type_id = t.id 

देखें SQL Fiddle with Demo

4

एक साधारण सबक्वेरी यह सिर्फ क्या करना चाहिए ठीक;

SELECT * FROM food_brands WHERE type_id= 
    (SELECT MAX(t.id) tid FROM types t 
    JOIN foods f ON f.id=t.food_id AND f.entry_id=12230) 

An SQLfiddle to test with

0

मैं नहीं जानता कि आप क्यों कर रहे हैं इन सभी भीतरी मिलती t2 सबक्वेरी पर एक के बाद, जब से तुम केवल fb के स्तंभों को पुन: प्राप्त कर रहे हैं, लेकिन मैं तो बस लगता है कि आप पूरे क्वेरी दिखाई नहीं दे रहे हैं, और आप वह एक तय करना चाहते हैं।

मुद्दा सबक्वेरी t2 में वास्तव में है: वहाँ, कुछ अनकही कारण के लिए, यदि आप एक GROUP BY id जो MAX समारोह अर्थ id प्रति एक अधिकतम मूल्य उत्पन्न करने के लिए बदल जाता है ऐसा करने के लिए चुनते हैं, और जब से तुम है कि बहुत पर अधिकतम पूछ रहे हैं कॉलम, MAX और GROUP BY सीए एक दूसरे से बाहर निकलते हैं। बस GROUP BY खंड को हटाकर क्वेरी को हल करता है।

यदि कुछ अनजान कारणों से आप उस खंड को नहीं हटा सकते हैं, तो MAX(id)id द्वारा ORDER BY id DESC LIMIT 1 जोड़कर।

इसके अलावा, आपके सबक्वायरी को शायद food_id का चयन करना चाहिए क्योंकि इसका उपयोग INNER JOIN खंड में किया जाता है।

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