Php 选择每一种

标签 php mysql

例如我有很多用户,他们每个人都选择了他们喜欢的游戏,现在在他们推荐的同一个 mysql 行中(竖起大拇指)。 示例数据库:

(nickname): Leonard, (recommends): 999, (game): Mario; (nickname): Nikky, (recommends): 1999, (game): Counter-Strike (nickname): Sam, (recommends): 199, (game): AION

现在我想做的是为每个游戏选择最推荐的用户,而不用做双 mysql 请求,这可能吗?

SELECT * FROM users ORDER BY 推荐DESC

这只是按推荐量排序显示所有这些,但我想要显示每个游戏的推荐最多的 1,因为有很多用户对同一游戏有大量推荐。

最佳答案

编辑:MySQL 5.7

尽管被接受,但在原始响应(见下文)中,建议的 MySQL 5.6 代码不会产生预期的结果,并且从 MySQL 5.7 开始它不可执行。

我推荐这种方法:

SELECT a.*
FROM users a 
LEFT JOIN users b 
ON a.game = b.game AND a.recommends < b.recommends
WHERE b.recommends IS NULL;

a.game 等于 b 时,通过在 ab 之间执行 LEFT_JOIN .gamea.recommends 小于 b.recommends 我们得到一个集合,其中 a.recommends 的值较高与 b.recommends 的空值相关联。像这样:

a.nickname  a.recommends  a.game     b.recommends
----------  ------------  ---------  ------------
will        100           mariobros  110
mary        50            cart       80
john        110           mariobros  800
will        100           mariobros  800
martin      80            cart       null
viola       800           mariobros  null

使用WHERE b.recommends IS NULL,我们将选择限制在我们感兴趣的行。这样,如果在同一类别中有两个得分相同的昵称,它们都会被选中,这以前的代码不是这种情况。

dbfiddle demo


原答案:

您可以简单地将 GROUP BY 添加到 ORDER BY 之前:

SELECT * FROM users GROUP BY game ORDER BY recommends DESC

SqlFiddle demo

关于Php 选择每一种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35662795/

相关文章:

java - 如何在不刷新所有页面的情况下刷新表格内容

php - 在文件名中使用多个点 (.)

php - 在 Zend PHP Framework 中执行内部连接

MySQL 数据库 ||表格问题

php - 变量占位符数量错误($wpdb->prepare + ON DUPLICATE KEY UPDATE)

php - 为较大的句子分配标签?

php - mysql 和 php 中的时间戳

javascript - 如何将 HTML SELECT 元素值设置为 php 变量 ONSELECT

php - 使用两个字段在 CodeIgniter 中进行表单搜索

php - 以两个为一组输出 Laravel 集合