2009-02-28 13 views
24

मुझे 'फ़ोल्डर्स' की एक टेबल मिली है। मैं 16 के उपयोगकर्ता के साथ सभी रिकॉर्ड वापस करना चाहता हूं।MySQL कथन एक जुड़ाव और गिनती संयोजन?

SELECT * FROM `folders` WHERE userId = 16; 

मुझे 'फाइल' की एक तालिका मिली है। ऊपर दिए गए प्रत्येक 'फ़ोल्डर' के लिए, मैं उस 'फ़ोल्डर' के भीतर 'फाइलों' की गिनती वापस करना चाहता हूं।

SELECT COUNT(*) as "Files" FROM files WHERE Folder = n; 

मैं इन्हें कैसे जोड़ूं? मैं हार गया हूं। धन्यवाद! ,

SELECT 
    folders.*, 
    COUNT(files.*) as filetotal 
FROM folders 
    LEFT JOIN files ON folders.ID=files.folderID 
WHERE userId = 16 
GROUP BY folders.ID 

उत्तर

13

आप शायद आईडी या इस तरह से ग्रुप द्वारा और समूह के लिए इसका इस्तेमाल करने की आवश्यकता होगी इस तरह क्वेरी:

select 
     f.* 
     fc.Files 
    from 
     Folders f 
-- 
     -- Join the sub query with the counts by folder  
     JOIN (select 
       Folder, 
       count(*) Files 
      from 
       files 
      group by 
       Folder) as fc 
      on (fc.Folder = f.Folder) 
    where 
     f.userid = 16 
+1

यह गलत है। फ़ोल्डर्स में संदर्भित कॉलम। * ग्रुप बाय क्लॉज में होना चाहिए। ग्रुप बाय के साथ एक SELECT कथन में सभी कॉलम या तो ग्रुप बाय या एक समग्र फ़ंक्शन में होना चाहिए। – alyssackwan

+0

हाँ, यही कारण है कि मैं folders.ID द्वारा समूहबद्ध कर रहा हूं (एक कॉलम समूह के लिए पर्याप्त है)। – dusoft

+0

इसे काम करने के लिए आपको SELECT क्लॉज में उल्लिखित "फ़ोल्डर्स" के सभी आवश्यक कॉलमों द्वारा ग्रुप करने की आवश्यकता होगी - मैंने "एक कॉलम समूह पर पर्याप्त है" के सिद्धांत का परीक्षण किया है और यह SQL सर्वर में सत्य नहीं है 2005 कम से कम। –

4

एक उप क्वेरी कि फ़ोल्डर द्वारा समूहों फ़ोल्डर प्रति गिनती पाने के लिए करते हैं तो यह पहली बार के लिए में शामिल होने:

2
select 
    f.`folder`, 
    f.`userId`, 
    r.`count` 

from 
    `folders` f 
    left join 
    (
     select 
      `Folder`, 
      count(`id`) `count` 

     from `files` 

      group by `Folder` 
    ) r 
     on r.`Folder`=f.`folder` 

where 
    `userId`=16 



आप बयान से समूह का उपयोग नहीं करना चाहते हैं।


मैं एक उत्पाद सूची जहां मैं एक और तालिका [1-5] और उस विशिष्ट उत्पाद के लिए मतदान उपयोगकर्ताओं की राशि में एक उत्पाद की स्टार रेटिंग गिनती करना चाहता था में एक समान समस्या थी।

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