在mysql中使用内部联接在同一个表中添加不同的列
我想做一份特定项目的时间记录报告。我试着在下面提问 表1:项目在mysql中使用内部联接在同一个表中添加不同的列,mysql,Mysql,我想做一份特定项目的时间记录报告。我试着在下面提问 表1:项目 id | Name ------------ 1 | A 2 | B 表2:EmployeeTimeEntry proj | activity |time ---------------------- 1 | coding | 5 2 | coding | 2 1 | testing | 2 1 | coding | 2 我对项目A的期望输出: proj |
id | Name
------------
1 | A
2 | B
表2:EmployeeTimeEntry
proj | activity |time
----------------------
1 | coding | 5
2 | coding | 2
1 | testing | 2
1 | coding | 2
我对项目A的期望输出:
proj | TotalDur | activity | Activitytime
--------------------------------------------
A | 9 | coding | 7
A | 9 | testing | 2
我的问题是:
$query = "SELECT
name as 'Proj',
TimeEntry.Total as 'TotalDur',
ATimeEntry.ADetails as 'activity',
ATimeEntry.ATotal as 'Activitytime'
FROM Projects pr
INNER JOIN(SELECT project,SUM(time) as Total from EmployeeTimeEntry group by project ) TimeEntry on pr.id = TimeEntry.project
INNER JOIN(SELECT project,details as ADetails,SUM(time) as ATotal from EmployeeTimeEntry where id = pr.id group by details ) ATimeEntry on pr.id = TimeEntry.project";
但我得到的结果是
proj | TotalDur | activity | Activitytime
--------------------------------------------
A | 9 | coding | 9
A | 9 | testing | 2
添加所有项目的所有活动时间。
我使用combobo选择要显示报告的项目。也许这就是您想要的
select
p.Name as Proj,
(select sum(time) as TotalDur from EmployeeTimeEntry where proj = p.id group by proj) TotalDur,
activity,
sum(e.time) as ActivityTime
from Projects p
inner join EmployeeTimeEntry e on e.proj = p.id
where p.Name = 'A'
group by name, activity, p.id
我认为你把事情复杂化了
select
p.name as Proj,
x.TotalDur,
et.activity,
sum(et.time) as Activitytime
from Projects p
join (
select proj, sum(time) as TotalDur from EmployeeTimeEntry group by proj
)x on x.proj = p.id
join EmployeeTimeEntry et on et.proj = p.id
where p.name = 'A'
group by p.name,et.activity
$query=选择p.name作为项目,x.TotalDur,et.details,SUMet.date\U end作为活动时间从项目p加入选择项目,SUMdate\U end作为TotalDur从EmployeeTimeEntry组按项目x在x.project=p.id加入EmployeeTimeEntry et在et.project=p.id,其中p.name='Project1'组按p.name,等等详细信息;我的查询是这样的,但在最终报告中没有显示任何内容。我的查询与SQLFiddle配合得很好。可能是我的代码中缺少了一些内容。我不太明白您所说的。我们是否可以将变量指定给where子句,而不是像where p.id=et.proj这样的字符串,因为我将此查询作为字符串发送给另一个函数。我使用相同的查询来显示所有项目。i、 e proj A和proj B。是的,您可以使用where p.name='A'接受变量名。这将根据输入值过滤掉结果。