Mysql 为每个作业获取两个匹配项
我有两张像下面这样的桌子 工作: id |用户id |职务|头衔 匹配项:id |作业|用户| id 作业和匹配表之间存在一对多关系。一个作业有多个匹配项 我想要两个匹配项的作业列表,如下所示:Mysql 为每个作业获取两个匹配项,mysql,sql,Mysql,Sql,我有两张像下面这样的桌子 工作: id |用户id |职务|头衔 匹配项:id |作业|用户| id 作业和匹配表之间存在一对多关系。一个作业有多个匹配项 我想要两个匹配项的作业列表,如下所示: Jobs => [ '0' => [ 'job_title' => 'abc', 'Matches' => [ '0' => [ 'id',
Jobs => [
'0' => [
'job_title' => 'abc',
'Matches' => [
'0' => [
'id',
'job_id',
'user_id',
],
'0' => [
'id',
'job_id',
'user_id',
]
]
],
'1' => [
'job_title' => 'abc',
'Matches' => [
'0' => [
'id',
'job_id',
'user_id',
],
'0' => [
'id',
'job_id',
'user_id',
]
]
]
]
请帮我解决这个问题。提前谢谢
我已经搜索了很多关于这个问题的信息,大多数博客都给了我类似于下面的解决方案,但这对我来说并不适用
set @num := 0, @group := '';
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc, person
) as x
where x.row_number <= 2;
您需要使用联接提取该数据,然后创建一个变量并保存在行上number@num. 在本例中,我们还需要另一个变量来保存组id作业id,这是在出现其他作业时重新启动行计数所必需的 最后,我们按@num筛选您想要的行数。记住matchNO是一个计算字段,所以不能在where语句中进行过滤,请改用have
set @num := 0, @job := 0;
select j.job_title, m.id, m.job_id, m.user_id,IF(@job = j.id,@num:=@num+1,@num:=1) as matchNO,@job:=j.id
from jobs j
left join matches m on j.id = m.job_id
having matchNO <= 2;
行号是确定您在哪一行所必需的。
job变量告诉您最后一行中的作业,以便您可以进行比较,然后在必要时再次将@num设置为1。
我希望它能有所帮助现在我们知道您想要得到什么,但您没有解释您的问题所在。堆栈溢出不是一种代码编写服务,希望您自己尝试编写代码。我建议您对您的问题进行一些研究,或者尝试页面顶部的搜索框,并尝试自己编写一些代码。如果/当您在代码中遇到任何问题,请再次询问并解释您尝试了什么,以及为什么它不适合您。请参阅以获取有关提问的帮助。我已经搜索了很多关于此问题的信息,几乎所有的博客和堆栈溢出问题都为我提供了与@bc004346相同的解决方案。我已经编辑了我的问题并添加了不适用于我的查询。@Wolen感谢您的时间。我只需要子表中的两条最新记录。但是它会给出子表中的所有记录,因为没有工具可以给出子表的限制。您能告诉我这方面有什么不清楚的地方,以便我能更好地解释吗?据我所知,这是一个mysql查询问题,Rav有足够的php知识来解决这个问题。@AndoitzJordán感谢您的时间。是的,这个答案涵盖了问题的50%。对于每个作业,我只需要从匹配表中记录两个最新的。通过这个查询,它将返回每个作业的所有匹配记录。