Php MySQL:groupby子句
我需要一些关于GROUPBYMySQL查询子句的帮助 奖牌表(包含所有奖牌): 用户奖牌表(其中包含用户获得的奖牌): MySQL查询:Php MySQL:groupby子句,php,mysql,greatest-n-per-group,Php,Mysql,Greatest N Per Group,我需要一些关于GROUPBYMySQL查询子句的帮助 奖牌表(包含所有奖牌): 用户奖牌表(其中包含用户获得的奖牌): MySQL查询: SELECT m.*, u.* FROM users_medals u LEFT JOIN medals m ON (u.medal_id=m.medal_id) WHERE u.user_id IN(1) GROUP BY m.medal_type ORDER BY u.earnedtime 这是为了显示用户获得的奖牌(这是一个公告板系统插件)。它选择并显
SELECT m.*, u.*
FROM users_medals u
LEFT JOIN medals m ON (u.medal_id=m.medal_id)
WHERE u.user_id IN(1)
GROUP BY m.medal_type
ORDER BY u.earnedtime
这是为了显示用户获得的奖牌(这是一个公告板系统插件)。它选择并显示用户奖牌id等于包含所有奖牌的表中奖牌id的奖牌
这很好,但是,它没有展示最新的奖牌。它只显示以下奖牌id:1,2。它应该显示3和4
其他信息:我只想显示每种奖牌类型中的一枚奖牌。因此,例如,如果用户获得了两枚“奖牌”,则仅显示最近获得的一枚奖牌,以及任何其他获得的奖牌
任何帮助都将不胜感激。您有“按奖牌类型分组”。由于此列的奖牌表值仅为1,2,因此结果中不会出现3和4。它不会显示3和4,因为您是按奖牌类型对其进行分组的。所以3和4与1和2的类型相同。如果你把团体取消,它将显示每一枚奖牌 如果您想要此组,但只需要3和4。那么你只需要
order by m.medal_type descending
因为您是按奖牌类型分组的,所以它只会选择每种类型中的一种。如果您想要一个用户获得的所有奖牌的列表,为什么要按奖牌类型分组
也许你在寻找最高级别的奖牌类型?如果是这样的话,您可能需要指定它。Dalen问了一个正确的问题-为什么您首先要使用GROUP BY?这在这个查询中是不需要的。分组服务的目的不同;也许你可以通过检查这样的例子来理解它
我想这也可以作为一个主题来做,但是奖牌类型在另一张桌子上的限制让我头疼。如果有两个表连接在一起的视图,编写起来可能会更容易。为什么要使用
按分组?@Dalen我需要以某种方式对奖牌类型进行分组,这样每种类型只显示一枚奖牌。如果显示奖牌id 1(类型1)和奖牌id 2(类型2)。那么每种类型只展示一枚奖牌。这么说它起作用了?@webbiedave是的,但是它没有显示“最新”的评论。@Spencer:对不起,我删除了我的评论,因为Matt H.大量编辑了他的评论,这使得我的评论毫无意义。我现在明白你的要求了。你需要最新获得的奖牌,每种类型一枚。我想要的是只展示每种奖牌类型中的一枚奖牌。因此,例如,如果用户有两个“post奖牌”,则最近获得的奖牌将是唯一显示的奖牌。
SELECT m.*, u.*
FROM users_medals u
LEFT JOIN medals m ON (u.medal_id=m.medal_id)
WHERE u.user_id IN(1)
GROUP BY m.medal_type
ORDER BY u.earnedtime
order by m.medal_type descending
SELECT m.*, u.*
FROM users_medals u
LEFT JOIN medals m ON u.medal_id = m.medal_id
WHERE u.user_id IN (1)
AND u.earnedtime = (
SELECT MAX(users_medals.earnedtime) FROM users_medals
LEFT JOIN medals ON users_medals.medal_id = medals.medal_id
WHERE users_medals.user_id = u.user_id
AND medals.medal_type = m.medal_type
)