如何从db中选择的前10个条目更新前5个条目

时间:2014-10-16 10:45:11

标签: php mysql sql

WRT:how to insert records for top 10 enteries only

这是更精确的问题。

我收集了前十名用户的特定任务。使用下面给出的查询。

mysql_query("SELECT `userid`, SUM(`points`) as `total` FROM 
    `tablename` GROUP BY `userid` ORDER BY total DESC LIMIT 10");

现在,我需要向前三名收集的用户颁发奖金,其中包括这些选定的前10名。我不知道如何为此目的编写查询。

前3名的前3名奖金不同 1:第一位用户得到1000分
2:第二位用户获得500分
3:第3位用户获得100分

我需要更新tablename = user,field name = points。

中的一个字段

要使用以下查询更新奖金(一般查询):

  $Db1->query('UPDATE user SET points=points+'.$rate.' 
WHERE userid = '.$credituser);

我希望按照社区标准详细阐述这个问题。

请指导。

1 个答案:

答案 0 :(得分:0)

使用纯MySQL版本。

当你标记PHP时,我会将其纳入我的答案:)

(Ps:不要使用mysql_*。由于OP使用mysql_*,我的回答将会是

  • 获取结果
  • 循环结果
  • 根据位置更新结果

$objGet = mysql_query("SELECT `userid`, SUM(`points`) as `total` FROM 
    `tablename` GROUP BY `userid` ORDER BY total DESC LIMIT 10");

if( mysql_num_rows($objGet) ) {
  $intIteration = 1;
  while( $arrResults = mysql_fetch_assoc($objGet) ) {
     switch($intIteration) {
        case 1 :
          mysql_query("UPDATE tablename SET points = points + 1000 WHERE userid = ". $arrResults['userid']);
        break;
        case 2 :
          mysql_query("UPDATE tablename SET points = points + 500 WHERE userid = ". $arrResults['userid']);
        break;
        case 3 :
          mysql_query("UPDATE tablename SET points = points + 100 WHERE userid = ". $arrResults['userid']);
        break;
        default:
         //No idea.
         //Not in the top 3.
        break;
     }
     $intIteration++;
  }
} else {
  //No users.
}