您将如何编写一个 MySQL 查询来限制连接表的结果(或子选择,如果效果更好)并计算连接表中的项目数?
例如,假设您有三个表:项目、任务和评论,其中一个项目有 0 个或多个任务,一个任务有 0 个或多个评论。您如何将每个项目返回的任务数限制为 3,并返回每个项目的任务总数和每个任务的评论?
这是我想象的结果集的样子:
project_id, project_title, task_id, task_title, num_tasks, num_comments
------------------------------------------------------------------------
1, Project1, 1, Task1, 4, 3
1, Project1, 2, Task2, 4, 0
1, Project1, 3, Task3, 4, 9
2, Project2, 10, Task10, 20, 0
2, Project2, 11, Task11, 20, 0
2, Project2, 12, Task12, 20, 2
3, Project3, 20, Task20, 17, 5
3, Project3, 21, Task21, 17, 1
3, Project3, 22, Task22, 17, 2
其中“Project1”、“Project2”等仅代表项目的标题,“Task1”、“Task2”等代表任务的标题。
最终,(在解析查询结果后)我希望能够显示如下内容:
Project1 (4 tasks)
Task1 (3 comments)
Task2 (0 comments)
Task3 (9 comments)
Project2 (20 tasks)
Task10 (0 comments)
Task11 (0 comments)
Task12 (2 comments)
Project3 (17 tasks)
Task20 (5 comments)
Task21 (1 comments)
Task22 (2 comments)
我猜这必须通过子选择来完成(这很好),但我似乎无法弄清楚如何仅使用连接来完成此操作,而且我对子选择的处理还不够好做这样的事情。