2

以下のデータベーステーブルがあります ここに画像の説明を入力

1 のユーザーに通知を表示したいowner_id。通知ショーは、2 人のユーザー (ID 17 と 2) がpost_id1 の投稿にコメントしたことを所有者に伝えます。次のクエリを試しましたが、代わりに 2 行が返されます。1 つの投稿の通知をまとめて返したいので、1 行を返すようにクエリを構成するにはどうすればよいですか? ありがとうございました。

SELECT DISTINCT commenters_id, id, owner_id, 
                post_id, type, UNIX_TIMESTAMP(date_done) AS date 
FROM notification 
GROUP BY commenters_id 
HAVING owner_id = '$user_id' AND commenters_id != '$user_id' 
ORDER BY date_done DESC
4

3 に答える 3

1

このコードでは、commenters_id は表示されませんが、代わりに各投稿に返信した人数が表示されます。誰かがその特定の投稿に返信したのdateは、これが最後になります。

SELECT
    COUNT(DISTINCT commenters_id) AS commenter_count,
    owner_id,
    post_id,
    type,
    UNIX_TIMESTAMP(MAX(date_done)) AS date 
FROM notification
WHERE owner_id = '$user_id' AND commenters_id != '$user_id' 
GROUP BY owner_id, post_id, type
ORDER BY UNIX_TIMESTAMP(MAX(date_done)) DESC
于 2012-04-17T07:38:53.927 に答える
1

を使用GROUP_CONCAT(commenters_id)して、投稿のコメント ID のコンマ区切りリストを取得できます。ただし、コメントではなく投稿ごとにグループ化する必要があるため、クエリは次のようになります。

SELECT DISTINCT GROUP_CONCAT(commenters_id), id, owner_id, 
                post_id, type, UNIX_TIMESTAMP(date_done) AS date 
FROM notification 
GROUP BY post_id 
HAVING owner_id = '$user_id' AND commenters_id != '$user_id' 
ORDER BY date_done DESC

GROUP_CONCAT を使用すると、必要に応じて、個別の値のみを返す、値を並べ替えるなど、データの処理を行うことができます。ここで完全なドキュメントを参照してください: http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat

于 2012-04-17T07:40:21.680 に答える
0

あなたの問題は、行を一意にするdate_done列も選択することです。この状況では、結果セットをグループ化することも許可されませDISTINCTん。GROUP BY

このクエリから列を除外するか、次のようなものを使用しますMAX(date_done)

編集:待ってください...あなたはすでに4行ではなく2行しか取得していませんか?望んでいた結果じゃないですか。多分私は質問を誤解した

于 2012-04-17T07:36:49.570 に答える