MySQL复杂查询。基于另一个表动态更新行。

3

enter image description here

上图是我绘制的方案。在理想情况下,content.user是分组的。但通常它们不是分组的。 我在这个方案中的意思是:

  1. 在第一步中,我选择 users.monetos WHERE users.id = content.user

  2. 在第二步中,我用每个 content.cpc 值(2.1,2.2)递减 users.monetos

模拟时: select content.user (9)

select users.monetos Where users.id=content.users (15)

所以我们对于users.id=9有15个 users.monetos 值,现在我们返回到content表 并且:

  1. 将15个值用8 (content.cpc) 递减 (15-8=7 > 0 -> 转到第2步)
  2. 将前一步的结果7递减10 (content.cpc) (7-10=-3 <0 -> 更新content set active='0' where content.id= (当得到负结果时的当前 id))

对于每个 content.user 进行类似操作。

更详细的描述 - 我想选择contet.*行,其中content.active = 1 (n)。有了这些数据,从前一个查询中选择SELECT users.monetos WHERE users.id=content.user。 现在,通过最大的(n)步骤,我将递减users.monetos值与content.cpc值,并且当 **users.monetos = 0或小于0时,我希望更新content并将active='0'**

换句话说,我想要将users.monetos金额分享给每个content条目(每个content.cpc)。而没有更多的users.monetos使当前的content条目无效。并对于每个content.user进行此操作。 我目前所做的就像下面显示的那样。我知道它看起来真的很糟糕,但我已经不知道该怎么办了。

$query = "select content.id, content.cpc, conent.user, content.active from content a
join users b on a.user=b.id
group by b.id where a.active='1'";

/** cycle each user **/
foreach($rows = $connector->fetchArray($query) as $row ) {
    $monetos = $row['monetos'];
    $query = "select id, cpc from content where user={$row['id']}";
    /** cycle each users content **/
    foreach($contents = $connector->fetchArray($query) as $content) {
        echo $monetos;
        $monetos -= $content['cpc'];
        if($monetos <= 0) {
            $disable[] = $content['id'];
        }
    }
    if( isset($disable) ) {
        $connector->query("update content set active='0' where id in(".implode(',',$disable).")");
    }
}

当你没有提供任何数据示例或正确的表结构时,帮助你变得非常困难。而且,当你试图实现一些复杂的算法时,最好画出一个图表以更容易理解你的想法。 - CrazySabbath
请稍等一下。 - Valeriu Mazare
@CrazySabbath,有的。如果您能看一下,我会非常高兴。 - Valeriu Mazare
1个回答

0
您可以尝试使用以下代码:
$query = "select * from users";
foreach($rows = $connector->fetchArray($query) as $row ) {
    $a='';
$query = "select * from content where user='{$row[id]}' and active='1' ";
foreach($contents = $connector->fetchArray($query) as $content ) {
    $a++;
    $a_min=$a-1;
    $test[$a]=$row[monetos]-$content[cpc];      
    if($a==2){
        if($test[$a_min] > 0){
            $test2=$test[$a_min]-$content[cpc];
            if($test2 < 0){
                $connector->query("update content set active='0' where id='$content[id]'");
            }
        }
    }
}   
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接