Php 如何使用Join将上次插入的单列与子表中的多个值进行匹配
我的数据库中有一个表作业。和它的两个子表。一个作业状态详细信息和分配的作业 一个作业可能具有多个状态,如具有一个作业id的作业状态详细信息中的已创建、已启动、已完成。 可以将一个作业分配给多个用户,并在“作业分配”中指定作业id 现在,我希望在job_status_detail中具有上次插入状态的所有job记录 我使用以下查询Php 如何使用Join将上次插入的单列与子表中的多个值进行匹配,php,mysql,Php,Mysql,我的数据库中有一个表作业。和它的两个子表。一个作业状态详细信息和分配的作业 一个作业可能具有多个状态,如具有一个作业id的作业状态详细信息中的已创建、已启动、已完成。 可以将一个作业分配给多个用户,并在“作业分配”中指定作业id 现在,我希望在job_status_detail中具有上次插入状态的所有job记录 我使用以下查询 SELECT * FROM `jobs` as `t` LEFT OUTER JOIN `job_assigned` as `jobDetail` ON (`job
SELECT * FROM `jobs` as `t`
LEFT OUTER JOIN `job_assigned` as `jobDetail` ON (`jobDetail`.`job_id`=`t`.`id`)
LEFT OUTER JOIN `job_status_detail` as `job` ON (`job`.`job_id`=`t`.`id`) WHERE jobDetail.assign_to=1
Order by job.id
但它给了我全部数据。如果一个作业在作业状态详细信息中有三个条目,它会给我三个条目,而不是最后插入的条目
结果应该是一个作业具有一个作业状态(上次插入)。您必须按标签放置分组
SELECT * FROM `jobs` as `t`
LEFT OUTER JOIN `job_assigned` as `jobDetail` ON (`jobDetail`.`job_id`=`t`.`id`)
LEFT OUTER JOIN `job_status_detail` as `job` ON (`job`.`job_id`=`t`.`id`)
GROUP BY job.job_status Order by job.id
这是我的解决办法
SELECT * FROM `jobs` as `t`
LEFT OUTER JOIN `job_assigned` `jobDetail` ON (`jobDetail`.`job_id`=`t`.`id`)
INNER JOIN (select max(id) id from `job_assigned` group by `job_id`) j ON jobDetail.id=j.id
LEFT OUTER JOIN `job_status_detail` `job` ON (`job`.`job_id`=`t`.`id`)
INNER JOIN (select max(id) id from job_status_detail group by job_id) jsd ON job.id=jsd.id
WHERE jobDetail.assign_to=1
你为什么参加分配的工作?如果每个作业只需要一个条目,这是一个问题,分配给该作业的每个用户至少会得到一行。如果您同意,如果您的作业状态详情表有一个sequenz字段,您可以添加一个where条件,该条件仅选择具有最高sequenz numberjob\u分配的匹配条目,用于其他信息。我完全明白了。但我无法正确获取工作状态详细信息。请重新阅读并理解。您的声明无效-如果分组,则无法选择*。此外,您的语句没有从作业\状态\详细信息中选择最后一个条目