PHP MySQL суммарный столбец объединенной таблицы для значений строки

Мне трудно добавить сумму (ну, действительно, разницу) в столбце, который находится в таблице, которую я создал в инструкции 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 сайтов ставок в нашей таблице сайтов ставок, и мы отслеживаем/за каждого пользователя, что их позиция на каждом сайте. Итак, на странице профиля Риджа у меня также есть таблица:

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 работать правильно. Вот как я хотел бы, чтобы он работал:

Остаток "Ролловер" - это расчет ((бонус * пролонгация) - сумма (ставки)) для определенного сайта.

Ridge Robinson 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 WHERE, но не уверен, как иначе суммировать конкретный сайт ставок без этого.

благодаря

0
источник поделиться
1 ответ

Я думаю, что вы являетесь виртуальным столбцом, который создается для одного и того же сайта и идентификатора из-за

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;
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос