0

我正在使用一个讨论板,其中会有某个主题,用户可以评论或支持另一个评论。每个评论也可以由另一个用户回复,并会收到通知。

我的通知表

  • notification_id是将收到通知的登录用户的 user_id
  • notification_from是评论或喜欢用户帖子的人的 user_id。
  • notification_topic是主题的 id 加上通知的类型,它将区分它是评论还是赞成票
  • notification_comment是主题中的comment_id
+-----------------+-------------+------ --------------+------------------------------------------------ ---+------------------------+-------+--- ----------------+--------------------+------------ ----------+---------+--------+
| 通知ID | 通知图片 | 通知名称 | 通知标题 | notification_user_id | 通知日期 | 通知_来自 | 通知主题 | 通知评论 | 类型 | 状态 |
+-----------------+-------------+------ --------------+------------------------------------------------ ---+------------------------+-------+--- ----------------+--------------------+------------ ----------+---------+--------+
| 1 | 32_1380182434_thumb.jpg | 希娜萨拉查 | 克莱斯勒文件出售股票| 2 | 1380188338 | 32 | 83_upvote | 1 | 点赞 | 阅读 |
| 2 | 32_1380182434_thumb.jpg | 希娜萨拉查 | 克莱斯勒文件出售股票| 2 | 1380188342 | 32 | 83_评论 | 1 | 评论 | 阅读 |
| 3 | 93_1379990163_thumb.jpg | 冯参孙 | 克莱斯勒文件出售股票| 2 | 1380188505 | 93 | 83_upvote | 1 | 点赞 | 阅读 |
| 4 | 93_1379990163_thumb.jpg | 冯参孙 | 克莱斯勒文件出售股票| 2 | 1380188509 | 93 | 83_评论 | 1 | 评论 | 阅读 |
| 5 | 93_1379990163_thumb.jpg | 冯参孙 | 克莱斯勒文件出售股票| 0 | 1380246975 | 93 | 83_评论 | 1 | 评论 | 未读 |
| 6 | 93_1379990163_thumb.jpg | 冯参孙 | 丰田和日产汽车召回| 2 | 1380247149 | 93 | 225_评论 | 3 | 评论 | 阅读 |
| 7 | 默认.gif | 凯丝阿吉拉尔 | 克莱斯勒文件出售股票| 2 | 1380253584 | 7 | 83_评论 | 1 | 评论 | 阅读 |
| 8 | 默认.gif | 凯丝阿吉拉尔 | 克莱斯勒文件出售股票| 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 | 通知图片 | 通知名称 | 通知标题 | notification_user_id | 通知日期 | 通知_来自 | 通知主题 | 通知评论 | 类型 | 状态 | 主题计数 |
+-----------------+-------------+------ --------------+------------------------------------------------ ---+------------------------+-------+--- ----------------+--------------------+------------ ----------+---------+--------+--------------+
| 6 | 93_1379990163_thumb.jpg | 冯参孙 | 丰田和日产汽车召回| 2 | 1380247149 | 93 | 225_评论 | 3 | 评论 | 阅读 | 1 |
| 2 | 32_1380182434_thumb.jpg | 希娜萨拉查 | 克莱斯勒文件出售股票| 2 | 1380188342 | 32 | 83_评论 | 1 | 评论 | 阅读 | 3 |
| 1 | 32_1380182434_thumb.jpg | 希娜萨拉查 | 克莱斯勒文件出售股票| 2 | 1380188338 | 32 | 83_upvote | 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 回答