【问题标题】:PHP MySQL Loop/ForeachPHP MySQL 循环/Foreach
【发布时间】:2016-10-25 01:30:16
【问题描述】:

我已经研究了很长一段时间如何通过其他问题完成这项工作,但我无法完全掌握它。这个链接似乎最相似,但我无法正确实现它,也许它可以帮助某人解决这个问题? MySQL while loop query inside other while loop query

我希望显示一个表格,该表格使用我们数据库中的信息来显示用户的过关投注、过关投注中的游戏以及相关的投注和赔率。我希望它看起来像下面这样:

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 只有一个过关投注 ID、一个投注、一个用户、一个赔率等。唯一的多重事件是每次过关的游戏数量可以在 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>';
}

我相信我将不得不在“主队”和“客队”$output 中创建一些辅助循环...有谁知道我怎样才能让它工作,循环将显示我的 PARLAYGAMES 中的所有游戏与每行给出的 Parlay ID 匹配的表,可以像我上面的示例表一样显示它?

我在想类似于下面的事情。我知道格式很糟糕(!),但我不确定如何正确编写它,所以我试图传达我的想法/逻辑。

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

作为参考,我的 DB 表列出了主队和客队的比赛,以及对球队表 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

【问题讨论】:

  • 您当前的查询是什么样的?
  • 嗨,迈克尔...我刚刚添加了它。为了在我的编辑中重申我的观点,我努力使我的示例尽可能简单,但我继续并附加了整个 SELECT 查询,因为我认为它可能会有所帮助。谢谢

标签: php mysql foreach while-loop


【解决方案1】:

只需循环遍历每条记录发出一行的结果,每次看parlay id 与上面的行不同时发出分界线(例如,在所有&lt;td&gt; 元素上使用border-top 样式)

查询看起来有点错误。我认为您应该为usersbonuses 设置LEFT OUTER JOIN

循环部分是这样的:

$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
   }

【讨论】:

  • 谢谢 Jasen...我认为这听起来不错,但我不确定如何通过循环实现它,因为我已经通过 parlayid 循环...然后想在其中循环游戏。你能提供至少一个我可以解决的示例代码想法吗?
  • 添加了一个例子。
  • thw 由于 mysql 不支持窗口函数,第一列不会完全绘制,但希望它足够接近。
  • Jasen...感谢您添加代码示例,这肯定会有所帮助。我已经测试并尝试编辑您输入的一些内容,但我一直遇到第一个 Parlay 未显示的问题。这是因为 $last_parlay_id 以 NULL 开头,所以它使第一个 if 子句失败,如果我让它以 1 而不是 NULL 开头,那么它会失败第一个 if 子句的第二部分!我仍然想知道是否有一种方法可以为每个匹配 ParlayID 的 GameID 添加多个主队和客队,并在它们之间添加一个
    ..这样看起来就像第一个代码块表
  • 如果你想在顶部有一行if($last_parlay_id != $row['Parlay ID'] ),请取出空检查
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 2016-09-02
  • 2016-12-28
  • 1970-01-01
  • 2016-09-26
  • 2012-07-19
  • 2018-08-20
  • 2012-06-19
相关资源
最近更新 更多