如何正确使用MySQL join / count

时间:2012-12-25 21:06:05

标签: php mysql

所以我有以下问题:

'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" '

我遇到了如何计算每次上传报告的问题。 此查询需要计算给定上传的所有报告,并在提取时返回所有上传内容。由于某种原因,每次插入新报告而不是添加到总计数中我都会得到一个重复上传。见下图:

enter image description here

注意console(1).png如何为每个与给定上传相关的报告显示三次...我真的希望它显示一次然后一边的计数应该是(3)。任何帮助将不胜感激!!

4 个答案:

答案 0 :(得分: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 Fiddle

答案 1 :(得分:0)

select count(upload.id),report.id 从报告,上传 LEFT JOIN报告ON upload.id = report.upload_id WHERE private =“0” group by report.id

答案 2 :(得分: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

答案 3 :(得分:0)

SQL Fiddle进行测试。

只需使用左连接并计算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",因为你没有指明它属于哪里。