2016-06-22 227 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