【问题标题】:PHP MySQL sum column of joined table per row valuesPHP MySQL sum column of join table per row values
【发布时间】:2016-10-21 02:34:30
【问题描述】:

我很难在我在 SELECT JOIN 语句中创建的表中的列中添加总和(嗯,确实是一个差异)。让我展示一下我所拥有的(简短形式),然后解释一下:

User Name   Betting Site    Home Team   Away Team   Wager   Odds
Ridge       LeoVegas        Molde       Tromso      1000    2.20
Ridge       Nordic Bet      Molde       Tromso      3000    1.60
Ridge       LeoVegas        Aalesund    Rosenborg   4000    1.30
Simon       Comeon          Aalesund    Rosenborg   2000    1.40

因此,此表显示了用户的投注历史、在哪个网站、所涉及的球队、投注和比赛赔率。我通过一个相当长的查询创建了这个表,该查询通过 JOIN/ON 结合了用户表、投注站点表、游戏表等。

目前,我们的投注网站表中有 10 个投注网站,我们正在跟踪/每位用户他们在每个网站上的排名。 所以,在 Ridge 的个人资料页面上,我还有一张桌子:

Betting Site    Deposit     Bonus       Rollover    Rollover Remaining  Days
LeoVegas        4000        4000        10                  ?           30
Nordic Bet      4000        4000        6                   ?           30
Comeon          3000        3000        12                  ?           90

这个问号是我遇到困难的地方。你看,我正在尝试将顶部表格中列出的所有投注的总和与投注网站和用户匹配。通过 JOIN 语句(和 $_GET 变量),我只能选择特定用户和特定投注网站的信息。但我无法让 SUM 正常工作。这就是我希望它的工作方式:

剩余流水是对特定网站的 ((bonus * rollover) - sum(wagers)) 的计算。

Ridge Robinson's Status
Betting Site    Deposit     Bonus       Rollover    Rollover Remaining  Days
LeoVegas        4000        4000        10          35000 (*40000-5000*)30
Nordic Bet      4000        4000        6           21000 (*24000-3000*)30
Comeon          3000        3000        12          36000 (*36000-0*)   90

这是我尝试过的:

SELECT
b.betting_site_name,
b.deposit,
b.bonus,
b.odds,
b.rollover,
b.days,
u.wager,
(SELECT
    SUM(wager) AS 'Total Risk'
    FROM userbets AS ub
    JOIN users AS u ON ub.userid = u.id
    JOIN bonuses AS b ON ub.siteid = b.id
    WHERE u.id = $id AND betting_site_name='$betsite') AS 'Total Rollover'
FROM bonuses AS b
LEFT JOIN userbets AS u ON u.siteid = b.id
LEFT JOIN users ON u.userid = users.id
WHERE users.id=$id AND betting_site_name='$betsite'
GROUP BY b.id;

但问题是,无论投注网站是什么,它都会计算相同的翻转金额,因此它们都与 LeoVegas 的顶级投注网站相同。有谁知道我如何使用 SUM 来使用 $row 中列出的博彩网站?我知道(嗯,不知道它还会从哪里来)错误来自我的 SUM WHERE 子句,但不知道如果没有它,如何对特定的投注网站求和。

谢谢

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    我认为您是为同一站点和 id 生成虚拟列,因为

    WHERE u.id = $id AND betting_site_name='$betsite') AS 'Total Rollover'

    试试下面的..

    SELECT
    b.betting_site_name,
    b.deposit,
    b.bonus,
    b.odds,
    b.rollover,
    b.days,
    u.wager,
    (SELECT
        SUM(wager) AS 'Total Risk'
        FROM userbets AS inner_ub
        JOIN users AS inner_u ON inner_ub.userid = inner_u.id
        JOIN bonuses AS inner_b ON inner_ub.siteid = inner_b.id
        WHERE inner_u.id = u.id AND inner_b.betting_site_name=b.betting_site_name) AS 'Total Rollover'
    FROM bonuses AS b
    LEFT JOIN userbets AS u ON u.siteid = b.id
    LEFT JOIN users ON u.userid = users.id
    WHERE users.id=$id AND betting_site_name='$betsite'
    GROUP BY b.id;
    

    【讨论】:

    • 感谢您的回答...不幸的是,它无法正常工作。它没有找到任何正确的信息,我相信这是因为内部选择查询需要 $id 和 $betsite 的 $_GET 变量。我正在尝试查看是否可以使用您的“inner_”别名的逻辑,但我还没有使它适用于这个。
    猜你喜欢
    • 2020-05-20
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多