У меня возникли трудности с выводом правильной информации из моего запроса SELECT. Это таблицы, из которых я выхожу.PHP MySQL complex join
У меня есть список игр:
ИГРЫ
id home_team away_team
1 1 2
2 3 4
3 12 16
Где эти HOME_TEAM и AWAY_TEAM идентификаторы совпадают с:
КОМАНД
id name
1 Team A
2 Team B
3 Team C
Кроме того, у меня есть игры и игры в игровые автоматы. Parlay Games ссылается на таблицу parlays.
экспрессы
id userid bettingsiteid wager odds
1 44 1 1000 2.0
2 45 5 1500 2.3
3 12 14 2000 1.8
PARLAY ИГРЫ
id parlayid gameid betinfo
1 1 1 Home Win
2 1 2 Away Win
3 1 5 Home Win
4 2 18 Home Win by 2 goals
Это то, что я хотел бы видеть в своей итоговой таблице:
Parlay ID Home Team Away Team User Wager Odds
Team A Team B
1 Team C name of teams.id = 4 Ridge Robinson 1000 2.0
name of teams.id = 12 name of teams.id = 16
-------------------------------------------------------------- (<tr> border)
Team C name of teams.id = 4
2 name of teams.id = x name of teams.id = x
-------------------------------------------------------------- (<tr> border)
Я надеюсь, что имеет смысл. Я просто хочу идентификатор parlay, а затем имя каждого дома и команды гостей в parlay.
Это мой запрос на выборке В настоящее время я пытаюсь:
SELECT
u.first_name AS 'User First Name',
u.last_name AS 'User Last Name',
u.id AS 'User ID',
ht.name AS 'Home Team',
away.name AS 'Away Team',
p.wager AS 'Wager',
p.odds AS 'Odds',
pg.parlayid AS 'Parlay ID',
pg.betinfo AS 'Bet Info',
pg.gameid AS 'Game ID',
g.date AS 'Game Date',
b.betting_site_name AS 'Betting Site'
FROM parlays p
JOIN parlaygames pg ON p.id = pg.parlayid
JOIN games g ON pg.gameid = g.id
JOIN teams ht ON g.home_team = ht.id
JOIN teams away ON g.away_team = away.id
JOIN users u ON u.id = p.userid
JOIN bonuses b ON p.bettingsiteid = b.id
ORDER BY
pg.parlayid,
pg.gameid
И это мой стол код:
<table class="table table-striped">
<tr>
<th>User Name</th>
<th>Date</th>
<th>Betting Site</th>
<th>Home Team</th>
<th>Away Team</th>
<th>Wager</th>
<th>Odds</th>
<th>Manager</th>
<th>Bet Info</th>
<th>Success</th>
<th>Edit</th>
</tr>
<?php
while($row = $result->fetch_array()) {
$hometeams = implode(' ',$row['Home Team']);
$output = '<tr>';
$output .= '<td><a href="userprofile.php?id='.$row['User ID'].'">'.$row['User First Name'].' '.$row['User Last Name'].'</a></td>';
$output .= '<td>'.$row['Game Date'].'</td>';
$output .= '<td>'.$row['Betting Site'].'</td>';
$output .= '<td>'.$hometeams.'</td>';
$output .= '<td>'.$row['Away Team'].'</td>';
$output .= '<td>'.$row['Wager'].' kr</td>';
$output .= '<td>'.$row['Odds'].'</td>';
$output .= '<td><a href="managerprofile.php?id='.$row['Manager ID'].'">'.$row['Manager First Name'].' '.$row['Manager Last Name'].'</a></td>';
$output .= '<td>'.$row['Bet Info'].'</td>';
$output .= '<td>'.$row['Success'].'</td>';
$output .= '<td><a href="edit_userbet.php?id='.$row['User ID'].'&betsite='.$row['Betting ID'].'&gameid='.$row['Game ID'].'&wager='.$row['Wager'].'&odds='.$row['Odds'].'&betinfo='.$row['Bet Info'].'" class="btn btn-default btn-sm">Edit</a></td>';
$output .= '</tr>';
echo $output;
}
?>
</table>
Но это совсем не так, как я получаю это показывает таблицу (упрощенный вниз)
Parlay ID Home Team Away Team Wager Odds
1 1 1 1000 2.0
1 2 2 1000 2.0
1 3 3 1000 2.0
-------------------------------------------------------------- (<tr> border)
Я знаю, что это потому, что я вставил $ gameid, но я не уверен, как получить домой и прочь чай m на идентификатор игры без ссылки на $ gameid на строку.
Есть ли у кого-нибудь предложения?
EDIT Одна из причин, по которой я организующих таблицу, как это происходит потому, что в моей таблице экспрессы, в дополнение к только пари идентификатор и хозяева/гости команда ... У меня также есть один пари и по одному коэффициенту, указанному для каждого набора. Возможно, кто-то лучше понимает отношения с иностранными ключами, которые могут работать лучше и решить эту проблему именно так?
** EDIT # 2 ** Я изменил структуру таблицы DB, но мне все же нужна помощь, отображающая мой стол переднего края правильно!
Ваша структура стола Parlays - плохая конструкция. Имея список, разделенный запятой, и фактическую таблицу первичного ключа комбинации (ParlayID, GameID), и каждая отдельная игра представляет собой свою собственную линию с соответствующей парой. Тогда ваш запрос должен работать. В противном случае вам нужно присоединиться к разрозненным значениям каждого идентификатора Parlay. – DRapp
DRapp ... Я могу понять, что это может быть плохой дизайн. Я определенно открыт для предложений. Не могли бы вы немного расширить свое предложение? Я не совсем понимаю, как я могу это настроить, потому что я не уверен, какие игры будут в павильоне или сколько? Возможно, я просто не понимаю логику этого? –