mysql - 在 MySQL 中,我可以有一个表按评分返回最近评分的十个游戏吗?

标签 mysql

实际问题比这更复杂一点,所以这里是。

我有一个评论游戏的网站。每个游戏都会发布评分/评论,因此我有一个 MySQL 数据库来处理这一切。

事实是,我真的希望有一个页面能够显示分数(满分 10 分)的含义,并以最后评论的游戏为例进行说明。我总是可以不做它,但这会更酷。

因此查询应该返回类似这样的内容(但从 10 运行到 0):

|---------------*----------------*-----------------*-----------------|
* game.gameName | game.gameImage | review.ourScore | review.postedOn *
|---------------*----------------*-----------------*-----------------|
| Top Game      | img            | 10              | (unix timestamp)|
| NearlyTop Game| img            | 9               | (unix timestamp)|
| Great Game    | img            | 8               | (unix timestamp)|
|---------------*----------------*-----------------*-----------------|

信息位于两个表中:游戏和评论。我认为你会使用 MAX() 来找出最后的时间戳和相应的游戏信息,但就复杂的查询而言,我有点难以理解。

当然,这可以通过 10 个简单的 SELECT 来完成,但我确信一定有一种方法可以在一个查询中完成此操作。

感谢您的帮助。

最佳答案

这是我发现的一个丑陋的解决方案:

此查询仅获取您想要查看的评论的 ID 和分数。我将其包含在内,以便您可以理解其中的技巧,而不会被其他内容分散注意力:

SELECT * FROM
(SELECT reviewID, ourScore FROM review ORDER BY postedOn DESC) as `r`
GROUP BY ourScore
ORDER BY ourScore DESC;

这利用了 MySQL 的“GROUP BY”行为。分组完成后,如果源行的不同列具有不同的值,则使用最上面的源行的值。因此,如果您的行按以下顺序排列:

reviewId  Score
1           3
0           3
2           3

然后按分数分组后,reviewId 为 1,因为该行位于顶部:

reviewId  Score
1           3

因此,我们希望在进行分组之前将最新的评论放在顶部。由于 ORDERing 总是在分组之后完成,因此在单个 SELECT 语句中,我必须创建一个子查询来完成此操作。现在我们只需稍微修饰一下这个查询即可获得您想要的所有字段:

SELECT `r`.*, game.gameName, game.gameImage FROM
(SELECT reviewID, ourScore, postedOn, gameID FROM review ORDER BY **postedOn DESC**) as `r`
JOIN game ON `r`.gameID = game.gameID
GROUP BY ourScore
ORDER BY ourScore DESC;

这应该有效。

关于mysql - 在 MySQL 中,我可以有一个表按评分返回最近评分的十个游戏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/646696/

相关文章:

mysql - 在数据库中存储照片引用的最有效方法

php - 使用 cake PHP 更新个人详细信息时,数据库上的密码会自动更改

java - 函数 <数据库名称>。 TOP 不存在

java - 在 SERVLET 中解析日期时遇到问题

mysql - 如何设置 SSL 连接到 RDS MySQL 实例

mysql where 子句不起作用

Mysql查询将两个条件合并为一行

mysql - 如何创建页面来编辑数据库

php - MySQL/PDO 排序问题

java - 在 SQL 查询中使用组合框的值