上图是我绘制的方案。在理想情况下,content.user
是分组的。但通常它们不是分组的。
我在这个方案中的意思是:
在第一步中,我选择
users.monetos
WHEREusers.id = content.user
在第二步中,我用每个
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表
并且:
- 将15个值用8 (
content.cpc
) 递减 (15-8=7 > 0 -> 转到第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).")");
}
}