Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
Mysql 为每个作业获取两个匹配项_Mysql_Sql - Fatal编程技术网

Mysql 为每个作业获取两个匹配项

Mysql 为每个作业获取两个匹配项,mysql,sql,Mysql,Sql,我有两张像下面这样的桌子 工作: id |用户id |职务|头衔 匹配项:id |作业|用户| id 作业和匹配表之间存在一对多关系。一个作业有多个匹配项 我想要两个匹配项的作业列表,如下所示: Jobs => [ '0' => [ 'job_title' => 'abc', 'Matches' => [ '0' => [ 'id',

我有两张像下面这样的桌子

工作:

id |用户id |职务|头衔

匹配项:id |作业|用户| 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%。对于每个作业,我只需要从匹配表中记录两个最新的。通过这个查询,它将返回每个作业的所有匹配记录。