【发布时间】:2016-12-10 22:00:59
【问题描述】:
我有一个包含三列 id、points、rank 的表。我及时更新了所有字段的数据,所以分数会上升和下降,但旧的排名保持不变,所以我试图找到一种方法,根据获得的分数赋予每个 id 其应得的排名。
我在这个表中有超过 2000 行。我想用 mysqli 在 php5+ 中做吗?我想我有一个解决方案,但即使设置了 1200 秒超时并且内存耗尽,它也会超时。
我认为我的解决方案可以正常工作,但任何循环都需要一些医生。在这里,我的粗略目标是“更新”查询以使其准确,该查询按 desc 顺序获取所有积分,并根据所获得的积分奖励 id 排名:
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php';
$a2= mysqli_query($link, "SELECT COUNT(*) as count FROM p1");
$b2 =mysqli_fetch_array($a2);
$count = $b2['count'];
$i=1;
while($i<=$count){
$a1= mysqli_query($link, "SELECT points FROM p1 ORDER BY points DESC LIMIT $i");
if(!$a1){
echo mysqli_error($link);
}
while($po = mysqli_fetch_array($a1)){
$ross[] = $po;
}
foreach($ross as $pot){
$points=$pot['points'];
}
$a5a= mysqli_query($link, "SELECT id FROM p1 WHERE points = '$points'");
while($popo = mysqli_fetch_array($a5a)){
$idi=$popo;
}
foreach($idi as $idm){
$id=$idm['id'];
$rank = $i;
$update = mysqli_query($link,"UPDATE p1 SET rank = '$rank' WHERE points = '$points' AND id ='$id'");
}
if(!$update){
echo "Error updating Rank".mysqli_error($link);
} else {
echo "Succuessul for where id = '$id' and points = '$points' set rank = '$rank'<br/>";
}
$i++;
}
?>
【问题讨论】:
-
欢迎来到 Stack Overflow!请修正代码的缩进。
-
修复了缩进。我猜!现在帮助我的极客!
-
坦率地说,像这样的方法和 cmets 你可能不会在这里收到任何答案。
-
我希望你证明是错的,哈哈,但是是的!我完全同意你的看法,所以你能指出我应该去哪里或去看看吗?任何想法伴侣! Thanx 4 建议,很抱歉,但您的回答失败了。抱歉,根本不想打扰任何人。这个问题对我来说有点大,因为我是刚出生的婴儿,根本没有父母来编码。
-
@Zmrzka:你差点中了靶心!我复制并运行了您的代码,但它什么也没做,但是是的!你的代码给了我正确的方法来解决它。我已经修复了这个错误。 $rank++;这个想法比运行那些多余的循环要好得多。我也删除了不同的。只需使用 foreach 遍历所有点和 id,并在 foreach 中给出更新命令。就在 foreach $rank=0; 之前就在更新 $rank++ 之前;我的回声准确地告诉了代码在做什么。这该死的也很快。我的意思是代码。谢谢你的努力伙伴!呸!