我遇到了问题。
<?php
include "base.php";
$result = mysql_query("SELECT * FROM users WHERE Score > 0 ORDER BY Score DESC LIMIT 3");
while ($row = mysql_fetch_array($result))
{
$name = $row['Name'];
echo $name;
echo "<br>";
}
?>
正如您所看到的,使用上面的代码我可以打印出前三名的人物。名。 如果我把它添加到循环中:
mysql_query("UPDATE users SET Balance = Balance + $reward WHERE Name = '$name'");
他们会得到相同的奖励。
所以我认为我需要让他们的名字给他们不同的奖励。
$reward1 = 1000;
$reward2 = 500;
$reward3 = 100;
我怎样才能得到他们的名字?还是有办法做这个工作?
答案 0 :(得分:2)
我建议你,你可以创建一个奖励数组,而不是变量,分别在while循环中调用它,参见下面的例子:
$rewards = array(
1000,
500,
100
);
$rewardIndex = 0;
while ($row = mysql_fetch_array($result))
{
mysql_query("UPDATE users SET Balance = Balance + $rewards[$rewardIndex] WHERE Name = '$name'");
$rewardIndex++;
}
答案 1 :(得分:1)
您可以使用变量枚举它们,然后在case
语句中使用它。实际上,您可以在SQL中完成所有工作:
UPDATE users u
SET balance = (CASE @rn := COALESCE(@rn + 1, 1)
WHEN 1 THEN balance + 1000
WHEN 2 THEN balance + 500
WHEN 3 THEN balance + 100
ELSE balance
END)
ORDER BY score DESC
LIMIT 3;
编辑:
用户定义的变量只保存额外的join
:
UPDATE users u JOIN
(SELECT u2.*, (@rn := @rn + 1) as rn
FROM users u2 CROSS JOIN
(SELECT @rn := 0) params
ORDER BY score DESC
LIMIT 3
) u2
ON u.user_id = u2.user_id
SET u.balance = (CASE WHEN rn = 1 THEN balance + 1000
WHEN rn = 2 THEN balance + 500
WHEN rn = 3 THEN balance + 100
ELSE balance
END);
不幸的是,当您使用update
时,MySQL不允许您在ORDER BY
语句中初始化变量。