Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:groupby子句_Php_Mysql_Greatest N Per Group - Fatal编程技术网

Php MySQL:groupby子句

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 这是为了显示用户获得的奖牌(这是一个公告板系统插件)。它选择并显

我需要一些关于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
这是为了显示用户获得的奖牌(这是一个公告板系统插件)。它选择并显示用户奖牌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
  )