0

私は、特定のトピックがあり、ユーザーが別のコメントにコメントしたり賛成票を投じたりできるディスカッション掲示板で作業しています。各コメントは、別のユーザーが返信することもでき、通知を受け取ります。

私の通知表

  • notification_id通知を受け取るログイン ユーザーの user_id です。
  • notification_fromユーザーの投稿にコメントまたはいいね! をしたユーザーの user_id です。
  • notification_topicトピックの ID と、コメントか賛成票かを区別する通知のタイプです。
  • notification_commentトピックの comment_id です
+-------------+-----------------------------+----- --------------+-------------------------------------------------- ---+----------------------+-------------------+--- ----+--------------------------------+------------ ----------+---------+--------+
| | 通知 ID | 通知_pic | 通知名 | 通知タイトル | 通知ユーザー ID | 通知日 | 通知_から | 通知トピック | 通知コメント | タイプ | ステータス |
+-------------+-----------------------------+----- --------------+-------------------------------------------------- ---+----------------------+-------------------+--- ----+--------------------------------+------------ ----------+---------+--------+
| | 1 | 32_1380182434_thumb.jpg | シーナ・サラザール | Chrysler が株式売却の書類を提出 | 2 | 1380188338 | 32 | 83_賛成票 | 1 | 賛成する | 読む |
| | 2 | 32_1380182434_thumb.jpg | シーナ・サラザール | Chrysler が株式売却の書類を提出 | 2 | 1380188342 | 32 | 83_コメント | 1 | コメント | 読む |
| | 3 | 93_1379990163_thumb.jpg | フォン・サムソン | Chrysler が株式売却の書類を提出 | 2 | 1380188505 | 93 | 83_賛成票 | 1 | 賛成する | 読む |
| | 4 | 93_1379990163_thumb.jpg | フォン・サムソン | Chrysler が株式売却の書類を提出 | 2 | 1380188509 | 93 | 83_コメント | 1 | コメント | 読む |
| | 5 | 93_1379990163_thumb.jpg | フォン・サムソン | Chrysler が株式売却の書類を提出 | 0 | 1380246975 | 93 | 83_コメント | 1 | コメント | 未読 |
| | 6 | 93_1379990163_thumb.jpg | フォン・サムソン | 車両リコールのトヨタと日産 | 2 | 1380247149 | 93 | 225_コメント | 3 | コメント | 読む |
| | 7 | default.gif | キャス・アギラー | Chrysler が株式売却の書類を提出 | 2 | 1380253584 | 7 | 83_コメント | 1 | コメント | 読む |
| | 8 | default.gif | キャス・アギラー | Chrysler が株式売却の書類を提出 | 93 | 1380253870 | 7 | 83_コメント | 2 | コメント | 未読 |
+-------------+-----------------------------+----- --------------+-------------------------------------------------- ---+----------------------+-------------------+--- ----+--------------------------------+------------ ----------+---------+--------+

私のクエリ

これは、テーブルをクエリしてグループ化する方法です。

SELECT *, COUNT(notification_topic) AS topic_count
    FROM tbl_notification
    WHERE notification_user_id =  '{$_SESSION['id']}'
    GROUP BY notification_topic
    ORDER BY notification_date DESC 
    LIMIT 8

クエリの結果は次のとおりです。

+-------------+-----------------------------+----- --------------+-------------------------------------------------- ---+----------------------+-------------------+--- ----+--------------------------------+------------ ----------+---------+--------+-------------+
| | 通知 ID | 通知_pic | 通知名 | 通知タイトル | 通知ユーザー ID | 通知日 | 通知_から | 通知トピック | 通知コメント | タイプ | ステータス | トピック数 |
+-------------+-----------------------------+----- --------------+-------------------------------------------------- ---+----------------------+-------------------+--- ----+--------------------------------+------------ ----------+---------+--------+-------------+
| | 6 | 93_1379990163_thumb.jpg | フォン・サムソン | 車両リコールのトヨタと日産 | 2 | 1380247149 | 93 | 225_コメント | 3 | コメント | 読む | 1 |
| | 2 | 32_1380182434_thumb.jpg | シーナ・サラザール | Chrysler が株式売却の書類を提出 | 2 | 1380188342 | 32 | 83_コメント | 1 | コメント | 読む | 3 |
| | 1 | 32_1380182434_thumb.jpg | シーナ・サラザール | Chrysler が株式売却の書類を提出 | 2 | 1380188338 | 32 | 83_賛成票 | 1 | 賛成する | 読む | 2 |
+-------------+-----------------------------+----- --------------+-------------------------------------------------- ---+----------------------+-------------------+--- ----+--------------------------------+------------ ----------+---------+--------+-------------+

sqlfiddleで参照してください。

必要なもの

次のように、Facebook のような通知を表示できるように、カウントを取得する必要があります。

ここに画像の説明を入力

私の主な問題は、それぞれをで分離する必要があるため、 の前ではできないORDERことです。トピックごとにコメントやいいねをした最新のユーザーを表示したい。どうすればいいですか?notification_dateGROUP BYnotification_commentnotification_topic

4

1 に答える 1

1

私があなたの問題を正しく理解していれば、groupwise maximumが必要です。これは、グループ内の識別基準を選択してから、テーブルに再び参加することで取得できます。

SELECT   *
FROM     tbl_notification NATURAL JOIN (
           SELECT   notification_topic,
                    notification_user_id,
                    MAX(notification_date) AS notification_date,
                    COUNT(*)               AS topic_count
           FROM     tbl_notification
           WHERE    notification_user_id = 2
           GROUP BY notification_topic,
                    notification_user_id
         ) AS t
ORDER BY notification_date DESC 
LIMIT    8

sqlfiddleで参照してください。

于 2013-09-27T07:00:08.410 に答える