2017-02-27 22 views
-1

私はゲット2試合

ジョブズ以下のような二つのテーブルがあります。

IDを| user_id | job_title

マッチ:id | job_id | user_id

ジョブとマッチテーブルの関係は1対多です。 1つのジョブに複数の一致があります。

それは以下のような2つの試合だと私はジョブのリストが欲しい:

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

Stack Overflowはコード作成サービスではありません。あなた自身でこれをコーディングしようとしています。私は、あなたの問題についての調査をしてみることをお勧めします(おそらく、ページの上部にある検索ボックスを試してみてください)、あなた自身でコードを書くことを試みてください。 /あなたのコードに問題が発生した場合は、再度尋ねて、あなたが試したこと、そしてそれがあなたのためにうまくいかなかった理由を説明してください。偉大な疑問や、[最小限の、完全で、検証可能な例](http://stackoverflow.com/)と尋ねる助けについては、[How to Ask](http://stackoverflow.com/help/how-to-ask)を参照してください。ヘルプ/ mcve)。 – bc004346

+0

私はすでにこの問題について多くの検索をしており、ほとんどのブログやスタックオーバーフローに関する質問は、@ bc004346と同じ解決策を示しています。私は自分の質問を編集し、私にとってはうまくいかないクエリを追加しました。 –

答えて

0

このデータを結合で抽出し、変数を作成して行番号(@num)を保存する必要があります。

"グループ" id(この場合はジョブID)を保存するには、別のジョブが表示されたときに行カウントを再開するために必要な変数も必要です。

最後に、必要な数の行を@numでフィルタリングします。 RememberNOは計算されたフィールドなので、どこのステートメントでフィルタリングすることはできません。代わりにhavingを使用してください。

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はその作業をするのに十分なPHP知識を持っていると理解しています。 –

+0

@AndoitzJordánお時間をありがとう。はい、この回答は質問の50%をカバーしていました。私は各仕事のマッチテーブルから最新の2つだけを欲しいと思っています。このクエリでは、各ジョブのすべての一致レコードが返されます。 –