我有一个数据库架构,员工在其中注册,这些员工根据项目分配工作。
1 名员工可以从事多项工作,例如。员工 John
在 project
abc
上执行任务 123
。员工 John
也在 project
abc
但在任务 789
上。
456
任务已分配给其他人,但这是另一个问题。
所以我们让 John 在同一个项目上执行不同的任务,因此我的 assign_job 表中有两个条目。
让我们在下面的小模式中查看图像:
这个模式很好。我现在面临的问题是我想要 timeSchedule 表。所以我为时间表添加了两个表。
新模式将在下面:
我在下面列出的两个项目的两个新表中添加了一些虚拟条目。
- 招聘与选拔
- 培训与发展
对于项目 1,我添加了 31 个条目,即员工每天都有一些工作时间。但是对于项目 2,员工只工作了 1 天。
现在我运行了这个查询,我认为这不是在这种情况下创建连接的正确方法。我发布这个问题是因为我对数据库中的数据得到了错误的结果。
SELECT
TS.`date_created` AS TimeSheetMonth,
TSD.`project_id` AS ProjectID,
TSD.`date` AS WorkDate,
TSD.`hours` AS WorkHours,
TS.`employee_id` AS EmployeeID,
E.`full_name` AS EmployeeName,
MLP.`project_title` AS ProjectTitle,
TS.`id` AS TimeSheetID
FROM timesheet TS
INNER JOIN timesheet_details TSD
ON TS.`id`= TSD.`timesheet_id`
INNER JOIN employee E
ON E.`employee_id` = TS.`employee_id`
INNER JOIN assign_job AJ
ON AJ.`employee_id` = E.`employee_id` AND AJ.`trashed` = 0
INNER JOIN ml_projects MLP
ON AJ.`project_id` = MLP.`project_id`
INNER JOIN ml_projects TMLP
ON TMLP.`project_id` = TSD.`project_id`
WHERE TS.`id`=1
GROUP BY TSD.`timesheetDetails_id`, TSD.`project_id`
正如您在下面的屏幕截图中看到的,我得到项目 ID 1 的项目名称,而我得到 2 作为项目 ID。也许还有更多问题。我在这些连接中做错了什么?
更新
http://sqlfiddle.com/#!2/dc4585/1
我想要单独的记录,因为我想在表格中显示它,如下所示。
最佳答案
您的timesheet
表或任何您想要命名的表,只需要一个外键 - job_id
,它指的是 assign_job_id 和在该任务上花费的时间。 employee_id
或 project_id
没有键,因为 assign_job
已经有了这些信息。我不想为您编写代码,因为我可以看到您可以自己完成。
您将时间表加入 assign_job,并将时间表加入员工和项目 - 瞧。然后,您可以按员工或/和按项目或/和任务分组。一切都在那里
关于php - 在不同表中的连接上得到错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27457598/