2017-02-27 55 views
-1

我有兩個表像下面取得兩場比賽的每個工作

喬布斯:

ID | user_id | job_title

比賽:id | job_id | user_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; 
+2

現在,我們知道你想要得到什麼,但你並沒有解釋什麼是你的問題。 – Wolen

+0

堆棧溢出不是一個代碼寫入服務,因此預計您會嘗試自己編寫代碼。我建議你對你的問題做一些研究(也許試試頁面頂部的搜索框),並嘗試自己編寫一些代碼。如果/當您遇到任何與您的代碼有關的問題時,請再次提問並解釋您所嘗試的內容,以及爲什麼它不適合您。請參閱[如何提問](http://stackoverflow.com/help/how-to-ask)尋求幫助,提出一個很好的問題以及[最小,完整,可驗證的示例](http://stackoverflow.com/幫助/ MCVE)。 – bc004346

+0

我已經搜索了很多這個問題,幾乎所有的博客和堆棧溢出問題給了我相同的解決方案@ bc004346我編輯我的問題,並添加查詢這不適合我。 –

回答

0

您需要使用連接提取數據,然後創建一個變量並在其上保存行號(@num)。

我們還需要另一個變量來保存「組」id(在這種情況下是作業ID),因爲當出現不同的作業時,需要重新啓動行計數。

最後我們用@num過濾所需的行數。記住,matchNO是一個計算字段,所以你不能過濾一個where語句,而是使用相應的語句。

set @num := 0, @job := 0; 

select j.job_title, m.id, m.job_id, m.user_id,IF(@job = j.id,@num:[email protected]+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。

我希望它能幫助

+0

這隻能回答這個問題的50%.. – Option

+0

請讓我知道什麼是不明確的,所以我可以嘗試解釋更好嗎?據我瞭解這是一個MySQL查詢問題,Rav有足夠的知識來完成這項工作。 –

+0

@AndoitzJordán感謝您的時間。是的,這個答案覆蓋了50%的問題。我只想從比賽表中爲每個職位記錄兩次最新消息。通過這個查詢,它會返回每個作業的所有匹配記錄。 –