2017-06-07 5 views
-1

これを達成する方法はわかりません。最後の2ラウンドのトーナメントの試合情報を表示するクエリ

私は、データベース内の2つのテーブルがあります。

表1:

+------------+----------+---------+----------+---------------+ 
| round_id | format | Size | poster | tournament_id | 
+------------+----------+---------+----------+---------------+ 
|  6  | Single | 12 | Luis |  1 
|  7  | Single | 9  | Daniel |  1  | 
|  8  | Single | 4  | Oscar |  1  | 
+------------+----------+---------+----------+---------------+ 

は表2ラウンド:最初のテーブルで一致

+------------+----------+-------------+----------+----------+ 
| round_id | player | position | score | winner | 
+------------+----------+-------------+----------+----------+ 
|  6  | Doris |  0  | 1  | 1  | 
|  7  | Arturo |  0  | 3  | 1  | 
|  7  | Pablo |  1  | 2  | 0  | 
|  8  | Ale  |  0  | 1  | 0  | 
|  8  | Maria |  1  | 5  | 1  | 
|  8  | Roberto |  2  | 4  | 0  | 
+------------+----------+-------------+----------+----------+ 

iはトーナメントのラウンドを持っているとし、第2テーブルでは、ラウンドで各試合を見ることができるように、各ラウンドの試合をの異なるサイズを持つことができます。だから、私は1つのクエリでこのような何かを得るために、テーブル「ラウンド」からちょうど最後の2回のラウンドしかしのすべての情報を取得したい:クエリから

結果:

//メイン

+---------------------------+ 
| by Daniel    | 
| Arturo (3) vs Pablo (2) | 
+---------------------------+ 

+---------------------------------------+  
| by Oscar        | 
| Ale (1) vs Maria (5) vs Roberto (4) | 
+---------------------------------------+ 
:キーが //

[7] => Array 
    (
     ['poster'] => 'Daniel' 
     ['format'] => 'single' 

      (
       [0] => Array 
         (
          ['player'] => 'Arturo' 
          ['score'] => 3 
         ) 
       [1] => Array 
         (
          ['player'] => 'Pablo' 
          ['score'] => 2 
         ) 
      ) 

    ) 
[8] => Array 
    (
     ['poster'] => 'Oscar' 
     ['format'] => 'single' 

      (
       [0] => Array 
         (
          ['player'] => 'Ale' 
          ['score'] => 1 
         ) 
       [1] => Array 
         (
          ['player'] => 'Maria' 
          ['score'] => 5 
         ) 
       [2] => Array 
         (
          ['player'] => 'Roberto' 
          ['score'] => 4 
         ) 
      ) 

    ) 

だから私のページでは、私は、最後のラウンドは、アップロードされたこのような何かを表示することができますnに順番0におけるround_idまたは数字をすることができ

は、MySQLの専門家はこれで私を助けることができます:)

+0

それらはすべて同じ大会に属しているのですか?これは問題ですか? – argoden

+0

私はちょうど情報と共にアップロードされた最後のラウンドを見せたいと思う。それは別のトーナメントからの場合は問題ではない – Mael

答えて

1

rounds表の最後の2行を取得するサブクエリでmatchesテーブルに参加を願っています。

SELECT * 
FROM (SELECT * 
     FROM rounds 
     ORDER BY round_id DESC 
     LIMIT 2) AS r 
JOIN matches AS m ON r.round_id = m.round_id 

を使用すると、PHPの配列内の同じラウンドの試合情報を組み合わせることができます方法についてはCreating one array from another array in phpを参照してください。あなたは、クエリは、各ラウンドの1行を返したい場合は

、あなたは、単一の列にmatch情報を組み合わせることGROUP_CONCATを使用することができます。

SELECT r.poster, r.format, GROUP_CONCAT(CONCAT(m.player, '(', m.score, ')') SEPARATOR ' vs ') AS players 
FROM (SELECT round_id, poster, format 
     FROM rounds 
     ORDER BY round_id DESC 
     LIMIT 2) AS r 
JOIN matches AS m ON r.round_id = m.round_id 
GROUP BY m.round_id 
+0

ありがとう!あなたのクエリで私は各プレイヤーのdifferents配列を取得し、この配列のラウンド情報の繰り返し:( – Mael

+0

あなたはPHPループで同じラウンドの行を結合します。私がリンクしている質問は、それを行う方法を示しています – Barmar

+0

実際に私はそれを行うことができますが、私はそれを行うにはoptmize方法が欲しいので、ここで私は例と "ラウンド"テーブルは実際には多くの列を持っているので、少なくとも各配列のラウンド情報を繰り返さない? – Mael

関連する問題