- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在为我的统一游戏制作高分系统,使用 mysql,php。
为了获取存储在数据库中的高分信息,我这样写,(数据库有“score”、“name”列,但没有“rank”列名称)
$sql = "SELECT id, score, name, CASE\n"
. " WHEN @prev_value = score THEN @rank_count\n"
. " WHEN @prev_value := score THEN @rank_count := @rank_count + 1\n"
. "END AS rank\n"
. "FROM BBR\n"
. "ORDER BY score DESC LIMIT $min, $max";
$result = mysql_query($sql) or Die('Query failed: ' . mysql_error());
$info = "";
while($found = mysql_fetch_array($result)){
$info = $info .'@'. $found['name'] .':'. $found['score'] .':'. $found['rank'];
}
echo $info;
并且在统一中,我收到此信息并拆分为每个字符串。
string[] score = serverHighScores[x].Split(':');
但是这个在score[0](name)、score[1](score)上工作的很好,但是在score[2](rank)上就不行了。
为什么?我该如何解决?谢谢。
这个查询是
SET @prev_value = NULL;
SET @rank_count = 0;
SELECT id, score, name, CASE
WHEN @prev_value = score THEN @rank_count
WHEN @prev_value := score THEN @rank_count := @rank_count + 1
END AS rank
FROM BBR
ORDER BY score DESC
这在 phpmyadmin SQL 中运行良好。
最佳答案
我会这样写查询:
SELECT b.id
, b.name
, @rank_cnt := IF(@prev_score = b.score,@rank_cnt,@rank_cnt+1) AS rank
, @prev_score := b.score AS score
FROM BBR b
CROSS
JOIN ( SELECT @rank_cnt := 0, @prev_score := NULL) i
ORDER BY b.score DESC, b.id DESC
注意:不能保证我们通过此查询观察到的行为。 MySQL 引用手册特别警告不要以这种方式使用用户定义的变量。但是我们观察到的行为(至少对于 MySQL 5.1 和 5.5)是一致的。
@prev_score
的赋值在比较之后完成很重要,这就是列在 SELECT 列表中按原样排序的原因。
我不认为 CASE 表达式中的赋值(它在问题查询中的方式)按照我们期望的方式“工作”。我认为这与 MySQL 执行的操作顺序有关。我总是将表达式的结果分配给 SELECT 列表中的用户定义变量,如上所示。
表达式 IF(@prev_score = b.score,@rank_cnt,@rank_cnt+1)
可以替换为等效的 CASE
表达式:
CASE WHEN @prev_score = b.score THEN @rank_cnt ELSE @rank_cnt+1 END
请注意,表达式正在返回一个值,而不是尝试进行赋值。
我更喜欢在语句中初始化用户定义的变量,而不是依赖于单独的 SET
语句。在这种情况下,我们并不真正关心内联 View i
返回的内容,除了我们希望它只返回一行(因为 JOIN 操作)......我们真的更感兴趣的是内联 View 查询在外部查询运行之前被具体化,以便在外部查询运行时初始化变量。
此外,我在 ORDER BY 中添加了另一个表达式,以便结果更具确定性。
...(添加指向 MySQL 引用手册中有关用户定义变量警告的适用部分的链接)
mysql_
接口(interface)函数已弃用。请改用 mysqli
或 PDO
接口(interface)。
关于php - 为什么这个 php 查询不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909809/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!