2014-02-14 95 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