【发布时间】:2012-02-23 12:01:50
【问题描述】:
我有三个表,我想从其中一个表中选择所有数据,并收集该特定数据行在其他两个表中链接的次数的 COUNT。
所以,从 site_projects 中选择所有数据。然后返回 COUNT of site_project_members WHERE site_projects.id = site_project_members.pid 并返回 COUNT of site_project_tasks WHERE site_projects.id = site_project_members.pid
我希望我是有道理的,对于查询,它看起来是正确的。它查询数据库(MySQL)没有问题。 除了它返回两个计数的总和作为两个东西。 (见下表结构)
site_projects
id | title | desc | start | deadline | progress
1 | Project 1 | a project | 1321748906 | 1329847200 | 20
site_project_members
id | pid | uid | img | hidden
1 | 1 | 1 | 1 | 0
2 | 1 | 2 | 2 | 0
site_project_tasks
id | pid | desc | completed
1 | 1 | Task 1 | 1
1 | 1 | Task 2 | 0
这是我的查询:
SELECT p.`id`, p.`title`, p.`desc`, p.`progress`, p.`start`, p.`deadline`, COUNT(m.`id`) as `members`, COUNT(t.`id`) as `tasks` FROM `site_projects` p LEFT JOIN `site_project_members` m ON p.`id`=m.`pid` LEFT OUTER JOIN `site_project_tasks` t ON p.`id`=t.`pid` ORDER BY p.`id` ASC
我得到的结果是:
id | title | desc | progress | start | deadline | members | tasks
1 | Project 1 | a project | 20 | 1321748906 | 1329847200 | 4 | 4
这两个“4”值都应该是 2。但是它们不是 :S 有人能帮忙吗? 非常感谢
谢谢, 丹
【问题讨论】:
-
这是因为你聚合错误! MySQL 与其他 RDBMS 不同,不会阻止您像这样运行聚合。基本上你会得到随机值,因为你没有指定
GROUP BY。