2014-02-14 52 views
1

我有一个MySQL表称为links,它具有以下栏目:如何使用GROUP BY与此数据

productId, fromUserId, toUserId, createdTimestamp

多个用户可以在相同的产品链接到用户。

我想要的是GROUP BY以获得所有'链接',其中toUserId = <some userId>。 由于1个产品可以连接多次(多行),我希望输出按照productId分组。因此,要得到的东西看起来像:

productId1, fromUserId1, fromUserId2, fromUserId3, newestCreatedTimestamp

productId2, fromUserId1, fromUserId2, newestCreatedTimestamp

现在我这组排在应用层面,因为我不知道如何在mysql中做到这一点。我不是mysql专家,文档是简单的东西(我的意见)!

回答

1

您可以使用GROUP_CONCAT aggregator function将所有fromUserId条目包括在一行中。这将生成与该GROUP BY相关联的所有fromUserId条目的逗号分隔列表。

SELECT `productId`, 
     `toUserId`, 
     GROUP_CONCAT(`fromUserId`) AS `fromUserIds` 
     MAX(`createdTimestamp`) AS `timestamp` 
FROM `links` 
GROUP BY `productId`, `toUserId` 

根据以下注释插入MAX()

+0

感谢您的回复。如何只添加最新的时间戳(以秒为单位的UNIX时间戳),因此最高的'createdTimestamp'值。 – xrDDDD

+0

@aremie编辑。只需使用另一个聚合器:MAX()。 – Sirko

+0

看另一个答案。你的得到想要的结果吗?另一个答案是更长的时间。如果没有JOIN,当然会更可取! – xrDDDD