MySQL Forums
Forum List  »  Newbie

Query question: Multiple joins to the same table
Posted by: Mike Toal
Date: July 15, 2014 06:49AM

Dear all,

I am trying to create a fantasy football database. There are four tables:

- data (containing the points per match for the players);
- players (containing details of the players);
- users (containing details of the competitors entering the competition); and
- weekRef (contains the week number, player and user id's)

I've included the results of show create table below.

To account for the fact that different users will transfer players during the year, I use the weekRef table to keep track of which user owns which player for a set week.

I want to write a query that returns the sum of points per week for a user. However my lack of a Mysql skillset is evident as I can't get the query to return the correct result.

I have tried to simplify my query by only returning the sum of points for each player using the following code:

select weekRef.week_no, weekRef.player_id, sum(data.points)
from weekRef
inner join data on weekRef.player_id = data.player_id
inner join data data2 on weekRef.week_no = data2.week
group by weekRef.week_no

For my dummy dataset this should return
1 - 14 - 2
1 - 14 - 3

However what it is actually returning is:
1 - 14 - 40062
1 - 14 - 36564

I am obviously not writing my query correctly and I suspect I have committed a cardinal SQL sin with my joins.

I would be most grateful if someone could shed some light on where I have erred in the above query and also suggest how I would extend the query to return the sum of points for a user for each week as my current attempt below is painfully wrong.

select weekRef.week_no, users.user_name, sum(data.points)
from weekRef
inner join data on weekRef.player_id = data.player_id
inner join data data2 on weekRef.week_no = data2.week
inner join users on weekRef.user_id = users.user_id
inner join players on users.user_id = players.user_id
group by weekRef.week_no

Kind regards,

Mike


Database details:
Version - 5.5.36-cll

data: CREATE TABLE `data` (
 `data_id` int(11) NOT NULL,
 `player_id` int(11) NOT NULL,
 `date` varchar(25) NOT NULL,
 `week` int(11) NOT NULL,
 `result` varchar(25) NOT NULL,
 `minutes_played` int(11) NOT NULL,
 `goals_scored` int(11) NOT NULL,
 `assists` int(11) NOT NULL,
 `clean_sheets` int(11) NOT NULL,
 `goals_conceded` int(11) NOT NULL,
 `own_goals` int(11) NOT NULL,
 `penalties_saved` int(11) NOT NULL,
 `penalties_missed` int(11) NOT NULL,
 `yellow_cards` int(11) NOT NULL,
 `red_cards` int(11) NOT NULL,
 `saves` int(11) NOT NULL,
 `bonus` int(11) NOT NULL,
 `EA_Spots_PPI` int(11) NOT NULL,
 `net_transfers` int(11) NOT NULL,
 `tbc` int(11) NOT NULL,
 `value` int(11) NOT NULL,
 `points` int(11) NOT NULL,
 PRIMARY KEY (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

players:CREATE TABLE `players` (
 `player_id` int(11) NOT NULL,
 `first_name` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `last_name` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `web_name` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `position` varchar(25) NOT NULL,
 `team` varchar(25) NOT NULL,
 `user_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`player_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

users:CREATE TABLE `users` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `user_name` text NOT NULL,
 PRIMARY KEY (`user_id`),
 KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1

weekRef:CREATE TABLE `weekRef` (
 `Ref_id` int(11) NOT NULL AUTO_INCREMENT,
 `week_no` int(11) NOT NULL,
 `user_id` int(11) NOT NULL,
 `player_id` int(11) NOT NULL,
 PRIMARY KEY (`Ref_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

Options: ReplyQuote


Subject
Written By
Posted
Query question: Multiple joins to the same table
July 15, 2014 06:49AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.