2014-10-16 29 views
1

WRT更新頂部的選擇前10 enteries 5 enteries:how to insert records for top 10 enteries only如何從數據庫

這是更細化的問題。

我收集了10位特定用戶的用戶。使用下面給出的查詢。

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

現在,我只需要獎勵bonues頂端3聚集用戶,從這些選擇的前10名。我沒有得到這個想法,就如何編寫查詢此目的。

頂部3獎金是頂部3
1不同:一是用戶得到1000點
2:第二用戶得到500點
3:第三用戶得到100分

我需要更新一個tablename = user中的字段,字段名稱= points。

更新我使用下面的查詢(通用查詢)獎金:

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

我希望這個問題很好地闡述了按照社會標準。

請指導。

回答

0

使用純MySQL版本。

正如您所標記的PHP,我會將此主題融入我的回答:)

(PS:不要使用mysql_*作爲OP使用mysql_*,我會回答)

  • 獲取結果
  • 循環遍歷結果
  • 更新取決於他們的位置
01結果

$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. 
} 
+0

優秀的答案,這是已經完美工作按我的需求。 – 2014-10-16 11:46:19

+0

@AtifShabbir太好了,謝謝! – 2014-10-16 12:06:55