2013-09-04 2 views
0

tbl_teams:team_id | имя_пользователя
tbl_players:player_id | player_fname | player_sname | player_bplace | player_bdate
tbl_players_stats:player_id | season_id | player_squad_no | team_id | player_apps | player_goals

Извините, если это основной вопрос, но из всех таблиц и столбцов MySQL выше я хотел бы присоединиться к таблицам, а затем отобразить результаты, с помощью которых выбираются опции season_id и team_id. Мне нужно использовать PHP следующим образом:Оставлено Соединение трех таблиц MySQL

player_squad_no | player_sname, player_fname | team_name | player_apps | player_goals

Я рассмотрел примеры здесь, но до сих пор не могу понять, как написать запрос MySQL, чтобы сделать это с тремя отдельными таблицами и как указать имя таблицы перед именем столбца. Я видел несколько примеров только с начальным. например, tt.teams. Является ли Левым способом?

Любая помощь будет высоко оценена. Заранее спасибо.

+4

Есть много вопросов, как это .. http://stackoverflow.com/questions/16222097/mysql-left-join-3-tables –

+1

или даже http://stackoverflow.com/questions/9722801/sql-left-joining-multiple-tables –

+0

Почему 'player_stats' и' игроки' находятся в отдельных таблицах? –

ответ

1

С три отдельных таблицами, вы просто написать присоединиться, как это:

SELECT * 
FROM Table_A AS A 
LEFT JOIN Table_B AS B USING(ID) 
LEFT JOIN Table_C AS C USING(ID) 

Обратите внимание, что USING(column) является синтаксической альтернативой ON A.column = B.column, которые вы можете использовать, когда столбцы вы хотите присоединиться на есть одно и то же имя в обеих таблицах.

В приведенном выше примере таблицы имеют псевдоним AS, так что вы можете ссылаться на них по псевдониму вместо полного имени таблицы. (AS фактически необязателен, вы можете просто дать псевдоним сразу после таблицы, если вы платите персонажем.) Попробуйте выбрать псевдоним, который имеет смысл, когда вы смотрите на него; зачастую люди псевдоним, как это:

SELECT a.Name, b.State 
FROM Customers AS a 
LEFT JOIN Orders AS b 
...etc. 

Но если у вас есть длинный запрос, как вы должны помнить, что таблицы a и b см? По крайней мере, было бы целесообразно использовать псевдоним Customers AS C и Orders AS O; в некоторых случаях я бы сделал следующий шаг: Registration AS REG, например. Это становится все более важным, так как вы все больше и больше таблиц вместе.

Вот один способ написать запрос:

SELECT 
    Stats.player_squad_no, 
    CONCAT_WS(', ', Players.player_sname, Players.player_fname) AS player_full_name, 
    Teams.team_name, 
    Stats.player_apps, 
    Stats.player_goals 
FROM tbl_players AS Players 
LEFT JOIN tbl_players_stats AS Stats USING(player_id) 
LEFT JOIN tbl_teams AS Teams USING(team_id) 

CONCAT_WS() функция включена, чтобы собрать полное имя игрока так, как вы указали, что хотели, чтобы отображаться. Поскольку эта функция выводит столбец с грязным именем, я также дал ему псевдоним.

+0

Большое вам спасибо! Он отлично работал. :) – julescoco

0
SELECT player_squad_no , player_sname, player_fname,team_name, player_apps, player_goals 
FROM tbl_players_stats as s 
JOIN tbl_players as p ON s.player_id=p.player_id 
JOIN tbl_teams as t ON s.team_id=t.team_id 
+0

Большое вам спасибо! Твой тоже работал. :) – julescoco

-1

Ничего не похоже на простое понятие. Но мы должны использовать соответствующие столбцы для таблиц. При выборе списка столбцов для выбора мы должны быть осторожны, используя псевдонимы таблиц.Попробуйте следующий код

select c.player_squad_no,b.player_sname,b.player_fname,a.team_name,c.player_apps,c.player_goals 
    from tbl_teams a,tbl_players b,tbl_players_stats c 
where a.team_id=c.team_id 
    and b.player_id=c.player_id 
+1

Не звучать критически, потому что ваш ответ хорош, но даже лучше было бы сделать так, чтобы псевдонимы таблицы сами документировали. Например, вместо того, чтобы просто a, b, c идти с чем-то вроде ... FROM tbl_teams Команды, tbl_players Игроки, tbl_players_stats Статистика – Strixy

+1

Также, пожалуйста, подумайте о том, чтобы использовать привычный синтаксис JOIN, когда это возможно. См. Также ответы на этот вопрос SO: [INNER JOIN ON vs WHERE clause] (http://stackoverflow.com/q/1018822/2359271) – Air

+0

Спасибо! Твой тоже работал. :) – julescoco

0

Это должно работать

SELECT tbl_players_stats.player_squad_no, 
    tbl_players.player_sname, 
    tbl_players.player_fname, 
    tbl_teams.team_name, 
    tbl_players_stats.player_apps, 
    tbl_players_stats.player_goals 
FROM tbl_players 
    JOIN tbl_players_stats ON tbl_players.player_id = tbl_players_stats.player_id 
    JOIN tbl_teams ON tbl_teams.team_id = tbl_players_stats.team_id 
+0

Большое вам спасибо! Твой тоже работал. :) – julescoco

Смежные вопросы