为每个工作获得两场比赛

时间:2017-02-27 14:38:43

标签: mysql sql

我有两张表,如下面

工作:

  

id | user_id | JOB_TITLE

     

匹配:id | job_id | USER_ID

作业和匹配表之间存在一对多的关系。一个工作有多个匹配。

我想要的作业列表包含以下两个匹配项:

{Binding RelativeSource={RelativeSource TemplatedParent},Path=CustomControlProperty}

请帮助我解决这个问题。提前谢谢。

我已经搜索了很多这个问题,大多数博客都给了我同样的解决方案,但是这对我来说不起作用。

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',
             ]
        ]
    ]
]

1 个答案:

答案 0 :(得分:0)

您需要使用连接提取该数据,然后创建一个变量并在其上保存行号(@num)。

我们还需要另一个变量来保存“group”id(在这种情况下为job id),以便在出现其他作业时重新启动行计数。

最后,我们用@num过滤你想要的行数。请记住,matchNO是一个计算字段,因此您无法过滤where where statment,而是使用。

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;
  • 行号是必要的,以确定你在哪一行。
  • 作业变量告诉您​​最后一行中的作业,以便您可以比较,然后在必要时再次将@num设置为1.

我希望它有所帮助