2016-06-30 9 views
0
+----+----------+-------------+-----------+---------------------+---------+---------------------------+ 
| id | action | object_type | object_id | created_at   | user_id | object_title    | 
+----+----------+-------------+-----------+---------------------+---------+---------------------------+ 
| 1 | shared |   0 |   1 | 2016-04-22 06:13:16 |  1 | 5 highest buildings  | 
| 2 | liked |   0 |   1 | 2016-04-22 06:15:02 |  1 | 5 highest buildings  | 
| 3 | liked |   0 |   1 | 2016-05-21 19:02:18 |  2 | 5 highest buildings  | 
| 4 | liked |   1 |   3 | 2016-05-21 19:02:21 |  3 | 5 largest bridges   | 
+----+----------+-------------+-----------+---------------------+---------+---------------------------+ 

私はFacebookのニュースフィードと同様のものを構築しようとしています。私は友人のリストの複数のユーザーが同じ投稿を好きなときに、このxyz投稿のようなfriend1、friend2、frn​​d3などと言っているニュースフィードに1つの結果しか表示しません。SQLグループby複数の列 - MySQL

この表から、この3つの列(action,,object_id)とこのオブジェクトのユーザー一覧でグループ化したいと思います。

SELECT * 
FROM mytable 
GROUP BY action, object_type, object_id 

しかし、これは私に奇妙な結果をもたらし、ユーザーのリストを期待していました。私は本当にこのクエリでそれを行う方法を知りません。

ご迷惑をおかけして申し訳ございません。

+0

このクエリ試してみてください:アクション、OBJECT_TYPE BY mytableは グループからのユーザーとして(USER_ID)カウント、 'SELECTアクション、OBJECT_TYPE、OBJECT_IDを、object_id' –

+1

を追加サンプルデータの行数を減らし、期待される結果を表示することができます。 – jarlh

+0

GROUP_CONCATを使用して、グループ化された行のリストを取得します。 – an33sh

答えて

1

あなたはこの溶液試すことができます

SELECT action, object_title,count(user_id) as user_count, group_concat(user_id) as user_ids 
    FROM mytable GROUP BY action, object_type, object_id; 
+0

これは何らかのアクションを行ったユーザーの数を返します。右?カウントの代わりにこれらのIDを取得するにはどうすればよいですか? – Wendy

+1

グループのconcatを使用 –

+0

クエリを更新 –