ここから多くの解決策を試しましたが、どれも私の問題を解決しませんでした! 次のテーブル構造があります。
|Column|Type|
|------
|activity_id| int(10) PRIMARY
|user_id| int(10)
|type| varchar(255)
|activity| varchar(255)
|item_id| int(11)
|secundary_id| int(11)
|date| datetime
アクティビティ ストリームを作成しています。このテーブルに次のように記録します。
「John (user_id) が 5 時間前 (date) に投稿 (type => item_id) に (アクティビティ) コメントしました」
私は次の構造を行うつもりです:
「John、Marie、+2 が 5 時間前の投稿にコメントしました」
これまでのところ、この接続はできましたが、レコードを日付順に並べることができません。独自のテーブルでいくつかの内部結合を試みましたが、(type,activity,item_id) でグループ化されていない他のアクティビティ タイプを取得できませんでした。次に例を示します。
「ジョン ( user_id ) が (アクティビティ) を投稿しました (type => item_id ) 5 時間前 (date)」
JOINS を使用すると、グループ化されたレコードのみが取得されます。これは私の実際のクエリです:
SELECT t.*, GROUP_CONCAT(DISTINCT user_id ) AS users FROM (
SELECT *
FROM activity
ORDER BY date DESC
)t
GROUP BY type, activity, item_id
ORDER BY date DESC
私はすでにここにリストされているいくつかの解決策を試しました.1つの列の値が異なる3つの最新のレコードを選択します しかし、テーブルを結合すると、グループ化されていないレコードが失われました! 別の考えを持っている人はいますか?今までありがとう!
/** 編集 - 結果
activity_id user_id type activity item_id secundary_id date users
865 32 update comment 20 22 2013-10-29 15:03:49 32,34
858 36 update post 20 NULL 2013-10-29 13:50:59 36
864 32 post comment 2615 21 2013-10-29 14:55:58 32,34,36
856 36 post comment 2616 14 2013-10-29 13:50:10 36,39,34,32
872 32 post comment 2617 28 2013-10-29 15:46:20 32
852 34 post post 2615 NULL 2013-10-29 13:47:25 34
854 32 post post 2616 NULL 2013-10-29 13:49:13 32
870 32 post post 2617 NULL 2013-10-29 15:36:57 32
それは上記のクエリで取得したものですが、たとえば、4 つのユーザー コメントがある item_id 2616 は、最後のユーザー コメントの日付で並べ替えられていません。たとえば、次のレコードがあります。
activity_id user_id type activity item_id secundary_item date
856 36 post comentar 2616 14 2013-10-29 14:05:10
彼の日付は14:05ですが、私の選択では、別の古いコメント日付が表示されます!
-- フィドル
http://sqlfiddle.com/#!2/1923d2/1
@トムによって解決