2016-06-22 226 views
0

我已經研究了很長一段時間,關於如何通過其他問題完成此任務,但我無法完全掌握它。這個鏈接看起來最相似,但我無法正確實施,也許它可以幫助某人解決這個問題?PHP MySQL循環/ Foreach

我正在尋找顯示使用我們數據庫中的信息來顯示用戶的郵件,遊戲內部和相關聯的賭注和賠率的表格。我想它看起來像如下:

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只有一個parlay id,一個賭注,一個用戶,一個賠率等。唯一的多個事件是每個parlay的遊戲數量可以在1或更大之間變化。

我使用while循環創建了此表以循環遍歷每個parlay,但不幸的是,此表顯示每列的每行信息,而不是我在圖片中顯示的信息。

while($row = $result->fetch_array()) { 

     $output = '<tr>'; 
    $output .= '<td>'.$row['Parlay ID'].'</td>'; 
    $output .= '<td>'.$row['Home Team'].'</td>'; 
    $output .= '<td>'.$row['Away Team'].'</td>'; 
    $output .= '<td>'.$row['User'].'</td>'; 
    $output .= '<td>'.$row['Wager'].'</td>'; 
    $output .= '<td>'.$row['Odds'].'</td>'; 
    $output = '</tr>'; 
} 

我相信,我將不得不創造「主隊」,還有一些很二次迴路「客隊」 $輸出的......沒有人知道我怎麼能得到這個工作,在那裏,循環會顯示所有我的PARLAYGAMES表中的遊戲與每行給出的Parlay ID匹配,可以像上面的示例表一樣顯示它?

我想到了類似於下面的內容。我知道格式非常糟糕(!),但我不確定如何正確書寫,所以我想表達我的想法/邏輯。

$output .= '<td>'while(*PARLAY TABLE id = $row['PARLAYGAMES.parlayid']) { echo PARLAYGAMES.gameid }'</td>'; 

作爲參考,我的數據庫表中列出了與主客場球隊列出的比賽對球隊表ID的參考。

GAMES 
id Home Team Away Team 
1  10   5 

然後我有一個

PARLAY TABLE 
id userid wager odds 
1  44  1000  2.0 

最後,我有一個

PARLAYGAMES TABLE 
id parlayid gameid 
1  1   1 
2  1   4 

感謝任何幫助!

編輯

我的工作讓我的例子儘可能通過不顯示所有表列一樣簡單,等於是我們可以得到邏輯/代碼的一部分了,但我要告訴我的整個查詢作爲它似乎最有意義這樣做:

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 
+0

什麼是你當前的查詢是什麼樣子? – Michael

+0

嗨邁克爾......我剛剛添加了它。爲了在我的編輯中重申我的觀點,我努力保持我的示例儘可能簡單,但是我繼續並附加了整個SELECT查詢,因爲我認爲它可以幫助您查看。謝謝 –

回答

0

通過結果每記錄發射一排剛剛循環,每次從行不同的時間看的Parlay ID上面發出的分界線(如使用所有<td>元素上的border-top風格)

該查詢看起來有點不對。我想你應該有LEFT OUTER JOINusersbonuses

環部分是這樣的:

$last_parlay_id=NULL; 
while($row = $result->fetch_array()) { 
    if($last_parlay_id != NULL && $last_parlay_id != $row['Parlay ID']) 
    { 
     $output = '<tr class="has-border-top">'; 
     $output .= '<td>'.$row['Parlay ID'].'</td>'; 
    }  
    else 
    { 
     $output = '<tr>'; 
     $output .= '<td></td>'; 
    } 

    $output .= '<td>'.$row['Home Team'].'</td>'; 
    $output .= '<td>'.$row['Away Team'].'</td>'; 
    $output .= '<td>'.$row['User'].'</td>'; 
    $output .= '<td>'.$row['Wager'].'</td>'; 
    $output .= '<td>'.$row['Odds'].'</td>'; 
    $output .= '</tr>'; 
    echo $output; 
    $last_parlay_id = $row['Parlay ID']; 
} 

,並在你的CSS

tr.has-border-top>td { 
     border-top: 1px solid black 
    } 
+0

謝謝Jasen ...我認爲這聽起來不錯,但我不確定如何使用循環來實現它,因爲我已經通過parlayid循環...然後想要在其中循環遊戲。你能夠提供至少一個我可以解決的示例代碼想法嗎? –

+0

增加了一個例子。 – Jasen

+0

由於mysql不支持窗口函數,所以thw第一列不會完全像繪製的那樣,但它有希望足夠接近。 – Jasen