优化多个MySQL(子)查询

我有一些大问题,要找到一个最好的方法来获得一个大的表,我的用户的戏剧。

功能是这样的: 人们可以玩两个不同的游戏,并赚取游戏币。额外的,他们有推荐的用户,从中他们也获得金额到他们的余额。我目前的查询需要很长时间,看起来像这样。

$sql = $mysqli->query("SELECT 
    n.id, n.account, n.email, n.lastpayout, n.referupnumber, 
    (SELECT sum(r.win) FROM rolls r WHERE r.konto = n.id AND r.zeit > n.lastpayout) as sumroll,
    (SELECT sum(m.gewinn) FROM multi m WHERE m.account = n.id AND m.zeit > n.lastpayout) as summulti,
    (SELECT count(nx.referupnumber) FROM nxt_account nx WHERE nx.referupnumber = n.id) as amountref
FROM
    nxt_account n");

$amountuser = $sql->num_rows;
$c = 1;  
while($row = $sql->fetch_array()) {

    $id_thistime = $row['id'];
    $sql_ref = $mysqli->query("SELECT 
    nn.id,
    (SELECT 
            sum(rr.win)
        FROM
            rolls rr
        WHERE
            rr.zeit >= nn.lastpayout AND rr.konto = n.id) as refamount
FROM
    nxt_account nn
WHERE
    nn.referupnumber = '".$id_thistime."'");
    $total_ref = 0;

while($row_ref = $sql_ref->fetch_array()) {

    $total_ref = $total_ref + $row_ref['refamount'];

}

$total_amount = $row['sumroll'] + $row['summulti'] + $total_ref;   }

解决方案:

我建议你把你的主查询改成这样,从一个数据库请求中进行所有计算。

    SELECT 
        n.id, n.account, n.email, n.lastpayout, n.referupnumber, 
        (SELECT sum(r.win) 
         FROM rolls r 
         WHERE r.konto = n.id AND r.zeit > n.lastpayout) as sumroll,
        (SELECT sum(m.gewinn) 
         FROM multi m 
         WHERE m.account = n.id AND m.zeit > n.lastpayout) as summulti,
        (SELECT count(nx.referupnumber) 
         FROM nxt_account nx 
         WHERE nx.referupnumber = n.id) as amountref,
        (SELECT sum(rr.win)
         FROM  rolls rr INNER JOIN nxt_account nn ON
            rr.zeit >= nn.lastpayout AND rr.konto = n.id
         WHERE nn.referupnumber =n.id) as refamount
    FROM
        nxt_account n

这样做的方式是,你有多少请求,就有多少记录在里面 nxt_account 表。这可能是计算速度慢的主要原因。

如果你只需要所有账户的一个总数数字,你也应该在SQL中进行计算。

给TA打赏
共{{data.count}}人
人已打赏
未分类

为什么我的代码在c++中不能反转字符串?

2022-9-8 6:47:36

未分类

Kotlin从列表中取出x个元素,但先删除最小的数字。

2022-9-8 6:47:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索