mysql Php每种选择一个

vsdwdz23  于 2023-02-28  发布在  Mysql
关注(0)|答案(5)|浏览(107)

例如,我有很多用户,他们每个人都选择了他们喜欢的游戏,现在在同一个mysql行,他们有建议(竖起大拇指).示例数据库:
(昵称):伦纳德,(推荐):999,(游戏):马里奥;(昵称):Nikky,(建议):1999年,(游戏):反恐精英(昵称):山姆,(建议):199,(游戏):全自动离子交换机
现在我想做的是为每个游戏选择最推荐的用户,而不做双重mysql请求,这可能吗?
SELECT * FROM用户ORDER BY建议DESC
这只是显示所有这些游戏的推荐数量排序,但我想要的是显示1与最推荐的每一个游戏,因为有许多用户有一堆推荐同一个游戏。

ukdjmx9f

ukdjmx9f1#

编辑: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.gamea.recommends小于b.recommends时,通过在ab之间执行LEFT_JOIN运算,我们得到了一个集合,其中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,我们将选择限制在我们感兴趣的行。这样,如果同一类别中有两个得分相同的昵称,它们都会被选中,而在前面的代码中不是这样。

    • 一个

原始答案:

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

SELECT * FROM users GROUP BY game ORDER BY recommends DESC
    • SqlFiddle演示**
muk1a3rh

muk1a3rh2#

您可以使用GROUP BY子句基于一个列合并多个记录,使用COUNT()进行计数。如果不查看完整的架构,很难做到,但类似于:
SELECT users.*, COUNT(users.recommends) AS total_recommends FROM users ORDER BY recommends DESC GROUP BY game

xn1cxnb4

xn1cxnb43#

可以使用group by。

SELECT users.*, MAX(user.recommends) AS maxrec GROUP BY game;
a9wyjsp7

a9wyjsp74#

SELECT t1.*
FROM users AS t1
LEFT JOIN users AS t2
ON t1.game = t2.game AND t1.recommends < t2.recommends
WHERE t2.recommends IS NULL

小提琴演示:http://sqlfiddle.com/#!9/43486/13/0

4xrmg8kj

4xrmg8kj5#

如果我理解的话,你想要的似乎是:

SELECT * FROM users group by game ORDER BY recommends DESC

group by使得每个游戏仅检索一个用户,并且order by检索具有高得分的用户。

相关问题