Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Help with a SQL query joining multiple tables

First I will explain the case, I have a table tbl_game with a structure as such. This table contains, the time where the game was started and pair playing the game

|    id    |     time     |     pair_id    |
-----------+--------------+ ---------------
1          | 123123123    |      1         |
2          | 123168877    |      1         |

and I have another table tbl_throws which holds the score for each player. In case you are wondering, this a basic dice rolling game

|   id     |    game_id   |   player_id   |  score  |
-----------+--------------+---------------+---------|
|    1     |    1         |   1           |   2     | 
|    2     |    1         |   2           |   5     |
|    3     |    1         |   1           |   9     |
|    4     |    1         |   2           |   11    |
|    5     |    2         |   1           |   7     | 
|    6     |    2         |   2           |   6     |

Now, id here is the throw id, not the game id. Here each player with player_id 1 and 2 has throws the dice twice and got the respective score as presented all in same game and just one time in another

Now, using these two table, I need to create a record set, that the total score of each player in one game

|  game_id   | game_time | player1_total | player2_total|
|------------+-----------+---------------+--------------|
|     1      | 123123123 |     11        |     16       |
|     2      | 123168877 |     7         |     6        |

I tried lots of mumbo jumbo queries, but nothing is giving corrent result? What is the correct query for this?

Update

Since, most of the answers were bounded by a fact that, player1id and player2id had to be known or fixed.

So may be the information I am about to provide will help to clear the confusion. there is another table, which holds the information of the player. tbl_pupil Structure is like the following

|   id    |   unique_id   | name     |
|---------+---------------+----------|
|   1     |     001       | some     |
|   2     |     002       | another  |

and these player are collectively called, a pair in another table tbl_pair

|   id    |   player1     | player2  |
|---------+---------------+----------|
|   1     |     1         | 2        |

So, now 
select 
    g.id
    g.time
    p1.id as player1id
    p1.name as player1name
    t.score as player1score
    p2.id as player2id
    p2.name as player2name
    t.score as player2score
FROM 
    tbl_game g,
    inner join tbl_pair as pair on g.pair_id = pair.id
    inner join tbl_pupil as p1 on p1.id = pair.player1
    inner join tbl_pupil as p2 on p2.id = pair.player2
    inner join tbl_throw as t on g.id = t.game_id

This is my preliminary query, which brings the record set, on a way as such

|   id    |   time  |   player1id    |  player1name |   player1score  |   player2id   |    player2name   |  player2score   |
----------------------------------------------------------------------------------------------------------------------------
|   1     |   12    |   1            |  some        |   5             |   2           |    another       |  2              |
|   1     |   12    |   1            |  some        |   5             |   2           |    another       |  5              |
|   1     |   12    |   1            |  some        |   9             |   2           |    another       |  9              |
|   1     |   12    |   1            |  some        |   11            |   2           |    another       |  11             |

Now I am just showing the results of one game id by the way. I don't save sufficient knowledge, to group the above record into one, with player1 separate sum score in one column and playe2's separate sum of score in another column.

like image 922
mrN Avatar asked Apr 19 '26 01:04

mrN


1 Answers

Try this:

SELECT 
  tbl_game.id AS game_id, 
  tbl_game.time AS game_time, 
  SUM(CASE WHEN player_id = 1 THEN score ELSE 0 END) AS player1_total, 
  SUM(CASE WHEN player_id = 2 THEN score ELSE 0 END) AS player2_total
FROM tbl_game JOIN tbl_thorws ON tbl_game.id = tbl_throws.game_id
GROUP BY tbl_game.id
like image 128
Michael Berkowski Avatar answered Apr 20 '26 15:04

Michael Berkowski



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!