Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Join将上次插入的单列与子表中的多个值进行匹配_Php_Mysql - Fatal编程技术网

Php 如何使用Join将上次插入的单列与子表中的多个值进行匹配

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

我的数据库中有一个表作业。和它的两个子表。一个作业状态详细信息和分配的作业

一个作业可能具有多个状态,如具有一个作业id的作业状态详细信息中的已创建、已启动、已完成。 可以将一个作业分配给多个用户,并在“作业分配”中指定作业id

现在,我希望在job_status_detail中具有上次插入状态的所有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分配的匹配条目,用于其他信息。我完全明白了。但我无法正确获取工作状态详细信息。请重新阅读并理解。您的声明无效-如果分组,则无法选择*。此外,您的语句没有从作业\状态\详细信息中选择最后一个条目