所以我有以下问题:
'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)。任何帮助将不胜感激!!
答案 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"
,因为你没有指明它属于哪里。