2012-11-23 16 views
7

İki tablom var: birleştirilen değerli taşlar ve mücevher. LEFT JOIN'i taşlar tablosundaki 10 kayıtla sınırlamaya çalışıyorum. Aynı zamanda birleştirilmiş 2 tablo daha var, ama probleme katkıda bulunmuyorlar. Aşağıdaki çalışmaz:Bir Sol Sınırı ilk tabloya katılın

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; 

Bu 10 döndürülen satır sayısını sınırlar, ancak her taş için birden ayrıntı kayıtları olmadığından, ben 10'dan az mücevher kayıtlarıyla kaldım. Her "LIMIT" yazısını okudum, ancak bu durumu bulamadım.

UPDATE 1: Tamam - jviladrich'e teşekkürler - işe yaradı. da çalışır altında yogeshr gelen kodu - Birlikte gideceğiz muhtemelen:

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 ; 

GÜNCELLEME 2: İşte kod. İkinize de teşekkürler! O

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) 
+0

Alt sorgunun içindeki sınırı taşıyın mı? – Ben

+0

MySQL'in bu sürümü henüz desteklenmiyor 'LİMİT & IN/ALL/ANY/SOME alt sorgusu' alt sorgunun içinde ne olduğunu. – mseifert

+0

Tamam, ilk 10 mücevherlerin ve tüm detaylarının kaydını istiyor ve daha sonra gemreply ve kullanıcılarla birlikte KAT veya ona katılmayı mı istiyorsunuz? – Rachcha

cevap

6

şey bu deneyin: Bu çalışması gerekir

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; 

.

4

gibi

+0

Bu da işe yarıyor! Muhtemelen bununla gideceğim - bana daha iyi yazıyor. Her iki yayını da cevap olarak işaretleyebilseydim (kontrol edildi). – mseifert

+0

Bu basit - sizin için en yararlı olan cevabı kabul edin :) – Rachcha

İlgili konular