SELECTクエリから正しい情報を出力するのが難しいです。これらは私が引っ張っているテーブルです。これらHOME_TEAMとaway_team IDのは、最大一致PHP MySQL複合結合
ゲーム
id home_team away_team
1 1 2
2 3 4
3 12 16
:
id name
1 Team A
2 Team B
3 Team C
さらに
TEAMS、私が持っている
私は、ゲームのリストを持っていますparlaysテーブルとパーレーゲーム。 Parlay Gamesはparlaysテーブルを参照します。
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)
私はそれが理にかなって願っています。私はちょうどパレイIDと、各家庭と離れたチームの名前をパレイにしたい。
これは私が現在しようとしています私の選択クエリです:
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を挿入したためだと知っていますが、私は家庭や紅茶を手に入れる方法がわかりません行ごとに$ gameidを参照することなく、ゲームIDごとに名前を付けます。
誰か提案はありますか?私parlaysテーブルで、ほかにちょうどパーレイIDとホームチーム/アウェイチームが...私は、1つの賭けを持っているとし、ので、私はこのようなテーブルを組織していた理由の
EDIT 一つは、各セットごとに1つのオッズが列挙されています。おそらく誰かが、より良く機能し、このようにこの問題を解決することができる外部キーの関係について、より良い考えを持っているでしょうか?
** EDIT#2 ** 私はDBテーブル構造を変更しましたが、フロントエンドテーブルを正しく表示するためにはまだ助けが必要です。
Parlaysのテーブル構造は悪いデザインです。コンマで区切られたリストと、(ParlayID、GameID)のコンビネーションプライマリキーの実際のテーブルとを比較し、それぞれのゲームを対応するパレイとの独自のラインとして持つ。それからあなたの質問は機能するはずです。さもなければ、各パレイIDの分解された値に加わる必要があります。 – DRapp
DRapp ...これは悪いデザインかもしれないことがわかります。私は確かに提案に開放されています。あなたの提案をもう少し拡張してもよろしいですか?私はそれをどのように設定することができるのかよく分かりません。なぜなら、どのゲームがパーレーになるのか、どれくらいのゲームがあるのか分からないからです。おそらく、私はこの背後にある論理を理解していないだけだろうか? –