mysql - 有效地将高分存储在数据库中

标签 mysql sql elasticsearch architecture

如何在数据库中有效存储高分?

我有一个表player_score,其中有两列player_id(主键)和score(整数值)。

现在我想要一个玩家在高分中的位置,我创建了以下查询

SELECT player_score.player_id,
   (SELECT COUNT(*) FROM player_score ps WHERE ps.score >= player_score.score) AS position   
FROM player_score      
WHERE player_score.player_id = 19

我认为这是非常低效的,你还有其他想法吗?还可以想象使用elasticsearch或任何其他技术来有效地存储这些数据。

最佳答案

您可以使用以下查询来获取用户在高分列表中的确切位置:

SELECT COUNT(*)+1 AS pos
FROM (SELECT *
      FROM player_score
      ORDER BY score DESC) AS ordered_scores, player_score
WHERE player_score.player_id=3 AND player_score.score < ordered_scores.score;

关于mysql - 有效地将高分存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32580186/

相关文章:

mysql - 无法将 MySQL 输出写入本地文件

java - 使用 GSON 从 hibernate MySQL select 创建的列表中读取字段名称

elasticsearch - 某些Elastic字段DSL查询可搜索,而某些则不可

json - 在上传到 Elasticsearch 之前为每个文档插入标题

php - 使用 JSON 将 mysql 数据加载到 Highcharts 折线图

Python MySQL 在 Blob 中插入和检索列表

sql - 需要找到两个日期之间的差异以及时间戳,但我需要在 postgresql 中排除星期六和星期日

php - 如何将 SQL 表中的行列出到 jquery 脚本中?

SQL 条件字符串在Where 子句中进行比较

python - 在python查询中将index作为参数传递给elasticsearch