0

だから私は次のクエリを持っています:

'SELECT *, upload.id AS id, report.id AS report_id, (SELECT COUNT(*) 
    FROM upload WHERE report.upload_id = upload.id) AS nums FROM upload 
    LEFT JOIN report ON upload.id=report.upload_id WHERE private="0" '

各アップロードのレポートのカウント方法に問題があります。このクエリは、特定のアップロードのすべてのレポートをカウントし、フェッチされたときにすべてのアップロードを返す必要があります。何らかの理由で、合計カウントに追加されるのではなく、新しいレポートが挿入されるたびに、重複したアップロードが発生します。下の画像を参照してください。

ここに画像の説明を入力してください

console(1).pngが、指定されたアップロードに関連するレポートごとに3回表示されることに注意してください...実際には、1回表示してから、側面のカウントを(3)にする必要があります。どんな助けでも大歓迎です!!

4

4 に答える 4

0

アップロードごとにレポートの数だけが必要な場合は、それらに参加する必要はありません。次のようにするだけです。

SELECT upload.*, 
      (SELECT COUNT(*) FROM report WHERE report.upload_id = upload.id) AS nums 
FROM upload 

またはあなたがすることができます:

SELECT upload.id, upload.name, count(*) as nums
FROM upload 
  INNER JOIN report ON report.upload_id = upload.id
GROUP BY upload.id, upload.name

これにより、すべてのアップロードがレポートとともに返されます。レポートの有無にかかわらずすべてのアップロードを取得するには、左結合が必要です。

SELECT upload.id, upload.name, count(report.id) as nums
FROM upload 
  left JOIN report ON report.upload_id = upload.id
GROUP BY upload.id, upload.name

これがクエリを含むSQLフィドルです。

于 2012-12-25T21:11:01.730 に答える
0

count(upload.id)、report.idをレポートから選択し、LEFTJOINレポートをupload.id= report.upload_id WHERE private="0"グループでreport.idにアップロードします。

于 2012-12-25T21:16:35.603 に答える
0
SELECT 
  upload.id, 
  upload.name, 
  count(1) as nums
FROM 
  upload 
LEFT OUTER JOIN 
  report ON
  report.upload_id = upload.id
GROUP BY 
  upload.id,
  upload.name
于 2012-12-25T21:51:30.547 に答える
0

テスト用のSQLフィドル。

report.upload_id左結合を使用して、 sを数えるだけです

select u.filename, u.filesize, COUNT(r.upload_id) as reports
from upload u
left join report r on u.id=r.upload_id
group by u.id, u.filename, u.filesize

where private = "0"あなたがそれがどこに属するかを指定しなかったので、私は省略しました。

于 2012-12-25T22:27:36.713 に答える