2012-12-08 19 views
25

मुझे कई समान प्रश्न दिखाई देते हैं लेकिन वे या तो जटिल हैं, मैं उन्हें समझ नहीं पा रहा हूं, या वे एक ही बात नहीं पूछ रहे हैं।किसी अन्य प्रश्न में एक एसक्यूएल क्वेरी से परिणाम का उपयोग करें जहां कथन (सबक्वायरी?)

यह आसान है: मेरे पास दो कॉलम हैं: उपयोगकर्ता (डीएमआईडी) और डाउनलोड (डीएफआईडी)।

  1. सभी उपयोगकर्ताओं को एक विशिष्ट फ़ाइल डाउनलोड का चयन करें:

    SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024" 
    
  2. उपयोगकर्ताओं के ऊपर का उपयोग करना, सभी फाइलों को वे सभी डाउनलोड लगता है:

    SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above} 
    
  3. गणना और डीएफआईडी के आदेश परिणाम, इसलिए हम देख सकते हैं कि प्रत्येक फ़ाइल को कितने डाउनलोड प्राप्त हुए:

    dfid dl_count_field 
    ---- -------------- 
    18  103 
    3  77 
    903  66 
    

उत्तर देने का मेरा प्रयास।

यह नज़दीक लगता है, लेकिन MySql नीचे गिरता है और 30 सेकंड के बाद भी प्रतिक्रिया नहीं देता है - मैं अंततः अपाचे को पुनरारंभ करता हूं। और अब मैं जटिल कथन की वजह से वाक्यविन्यास त्रुटियों के बिना गिनती और व्यवस्था को कैसे व्यवस्थित करना नहीं चाहता - और यह सही कथन भी नहीं हो सकता है। अगर यह बहुत लंबा तो लेता

SELECT dfid from downloads_downloads WHERE dmid IN (
    SELECT DISTINCT dmid FROM `downloads_downloads` where dfid = "7024") 
+3

आप उपयोग नहीं करना चाहिए समझाने पोस्ट करने के लिए की आवश्यकता होगी चरित्र अक्षर के लिए डबल कोट्स ('" '), इसके बजाय सिंगल कोट्स का उपयोग करें। डबल कोट्स एक MySQL चीज हैं और अन्य डीबीएमएस के साथ काम नहीं करेंगे (क्योंकि मानक एसक्यूएल डबल कोट्स में पहचानकर्ताओं के लिए उपयोग किया जाता है, न कि शाब्दिक के लिए)। और यदि कि डीएफआईडी एक संख्यात्मक मूल्य है, आप किसी भी उद्धरण का उपयोग नहीं करना चाहिए। संख्याओं को उद्धरण की आवश्यकता नहीं है। –

उत्तर

33
SELECT dfid,count(*) 
from downloads_downloads 
WHERE dmid IN (
    SELECT dmid 
    FROM downloads_downloads 
    where dfid = "7024" 
) 
group by dfid 

या एक स्वयं का उपयोग कर

select t1.dfid,count(*) 
from downloads_downloads t1 
inner join downloads_downloads t2 
on t1.dmid = t2.dmid 
where t2.dfid = "7024" 

में शामिल होने आप शायद एक योजना (यह गूगल!)

+4

मेरे लिए समाधान # 1 काम करता है, और यह काफी आसानी से समझ में आता है, लेकिन क्या आप कृपया समझा सकते हैं, मुझे समाधान # 2 मैं स्टैंड में स्वयं शामिल हो सकता हूं –

+0

@ पॉल-क्रीसी मुझे पता है कि यह पुराना है, लेकिन क्या आप दूसरे कोड की व्याख्या कर सकते हैं? – Rafael

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