10

2 つのテーブルがあります: gems と gemdetail が結合されたままです。gems テーブルで LEFT JOIN を 10 レコードに制限しようとしています。他にも 2 つのテーブル (gemreply と users) が結合されていますが、これらは問題の原因ではありません。以下は機能しません。

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 に制限されますが、gem ごとに複数の詳細レコードがあるため、gem レコードは 10 未満になります。すべての「LIMIT」投稿を読みましたが、このような状況は見つかりませんでした。

更新 1: OK - jviladrich のおかげで、うまくいきました。コードは次のとおりです。

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: 以下の yogeshr のコードも機能します。おそらく、私が使用するコードです。お二人ともありがとう!

4

2 に答える 2

10

そんな感じ

   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)
于 2012-11-23T09:02:55.460 に答える
8

これを試して:

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;

これはうまくいくはずです。

于 2012-11-23T09:13:26.507 に答える