2012-11-23 14 views
7

मेरे पास दो टेबल हैं: रत्न और जुआ जो शामिल हो गए हैं। मैं रत्न की मेज में 10 रिकॉर्ड्स में बाएं जॉइन को सीमित करने की कोशिश कर रहा हूं। 2 अन्य टेबल भी शामिल हैं (gemreply और उपयोगकर्ता), लेकिन वे समस्या में योगदान नहीं करते हैं। निम्नलिखित काम नहीं करता:बाएं को सीमित करें पहली तालिका में शामिल हों

SELECT gems.gemid, gems.title, r.tot, gemdetail.filename FROM ((gems 
LEFT JOIN (SELECT gemid, COUNT(*) AS tot FROM gemreply GROUP BY gemid) AS r ON gems.gemid = r.gemid) 
LEFT JOIN gemdetail ON gems.gemid = gemdetail.gemid) 
LEFT JOIN users ON gems.userid = users.userid 
WHERE gems.grade = '7' ORDER BY gems.gemid LIMIT 0, 10; 

यह 10 को लौट पंक्तियों की कुल संख्या को सीमित करता है, लेकिन बाद से वहाँ कई विस्तार प्रत्येक मणि के लिए रिकॉर्ड कर रहे हैं, मैं 10 से कम मणि रिकॉर्ड के साथ छोड़ दिया है। मैंने प्रत्येक "LIMIT" पोस्ट पढ़ ली है, लेकिन इस स्थिति को नहीं मिला है।

अद्यतन 1: ठीक है - जेविलाड्रिच के लिए धन्यवाद - यह काम करता है। शायद एक मैं के साथ जाना होगा - yogeshr से कोड के नीचे भी काम करता है:

SELECT gems.gemid, gems.title, r.tot, gemdetail.filename 
FROM ((gems 
INNER JOIN (SELECT gems.gemid from gems WHERE gems.grade = '7' ORDER BY gems.gemid LIMIT 0, 10) g 
ON (gems.gemid = g.gemid) 
LEFT JOIN (SELECT gemid, COUNT(*) AS tot FROM gemreply GROUP BY gemid) AS r ON gems.gemid = r.gemid) 
LEFT JOIN gemdetail ON gems.gemid = gemdetail.gemid) 
LEFT JOIN users ON gems.userid = users.userid ; 

अद्यतन 2: यहाँ कोड है। तुम दोनों का धन्यवाद!

+0

उप-क्वेरी के भीतर सीमा को ले जाएं? – Ben

+0

MySQL का यह संस्करण अभी तक 'LIMIT और IN/ALL/ANY/SOME subquery' का समर्थन नहीं करता है जो उप क्वेरी के अंदर होता है। – mseifert

+0

ठीक है, तो क्या आप पहले 10 रत्नों और उनके सभी विवरणों का रिकॉर्ड चाहते हैं और फिर शामिल हों या LEFT- इसे gemreply और उपयोगकर्ताओं के साथ शामिल करें? – Rachcha

उत्तर

6

कुछ ऐसा

SELECT * FROM A 
     INNER JOIN (SELECT * FROM A WHERE A.FIELD1='X' ORDER BY A.FIELD2 LIMIT 10) X 
      ON (A.KEYFIELD=X.KEYFIELD) 
     LEFT JOIN B ON (A.FIELD = B.FIELD) 
     LEFT JOIN C ON (A.FIELD = C.FIELD) 
4

की तरह इस प्रयास करें:

SELECT g.gemid, g.title, r.tot, gemdetail.filename 
FROM (SELECT * FROM gems WHERE grade = '7' LIMIT 10) g 
LEFT JOIN (SELECT gemid, COUNT(*) AS tot FROM gemreply GROUP BY gemid) r 
      ON r.gemid = g.gemid 
LEFT JOIN gemdetail ON g.gemid = gemdetail.gemid 
LEFT JOIN users ON g.userid = users.userid 
ORDER BY g.gemid; 

यह काम करना चाहिए।

+0

यह भी काम करता है! मैं शायद इस के साथ जाऊंगा - यह मेरे लिए बेहतर पढ़ता है। काश मैं दोनों पदों को उत्तर (चेक) के रूप में चिह्नित कर सकता हूं। – mseifert

+0

यह आसान है - उस उत्तर को स्वीकार करें जो आपके लिए सबसे उपयोगी रहा है :) – Rachcha

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