php - PHP中的通知系统

标签 php mysql database

我正在构建一个与社交网络相同的响应式网站 我有 4 张 table checkin friend post notification

这是 notification 的结构表格

 Notification

 id 
 user_id
 activity_type   
 source_id  
 created_date   
 created_by     
 updated_date   
 updated_by 

其中事件类型是一个字符串,例如“friendrequest”(如果有人接受 friend 请求),“checkin”(如果有人签到某个事件)和“post”(如果有人创建帖子)。

现在我将数据存储在 Notification 中每当触发任何这些操作时都会显示表格,但我很困惑我应该如何在列表中显示数据以登录用户。notification 中的数据表格将是这样的

id  user_id activity_type source_id created_date  
5   1       friend        488       2015-10-13   
6   48      checkin       10        2015-10-13   
7   1       checkin       9         2015-10-13   
8   9       friend        7         2015-10-13   
9   1       checkin       27        2015-10-13   
10  48      post          18        2015-10-13  
11  9       checkin       8         2015-10-13  

就像 activity_type 一样source_id将连接到 event 中的任一个, checkingpost table 。那么我应该使用哪个查询来正确显示通知。

我如何控制通知获取,比如任何事件都应该只显示给用户的 friend 。

我使用了这个查询,但它不能正常工作

SELECT
    group_concat(`user_id`) as 'users',
    `activity_type`,
    `source_id` as 'post'
FROM
    `notification`
WHERE
    `source_id` IN ("488") 
GROUP BY
    `source_id`,
    `activity_type` 
ORDER BY
    `source_id` 

让我知道是否还有在线可用的示例项目 根据我在这里得到的答案,我写了这个查询 让我知道是否可以通过任何其他方式即兴创作

 SELECT 
      notification.*,event.title 
 FROM 
      notification 
 INNER JOIN 
      event 
 ON 
      event.id = notification.source_id 
 AND 
      notification.activity_type = "checkin"
 WHERE
      notification.user_id in (488,489) 
 UNION 
 SELECT 
      notification.*,user.firstname FROM notification 
 INNER JOIN 
      user 
 ON 
      user.id = notification.source_id 
 AND 
      notification.activity_type = "friend"
 WHERE
      notification.user_id in (488,489) 

如何找到已登录用户的好友? 我应该写另一个查询吗

Select friend_id from friend where user_id=1

并保存id的数组并将其传递给 notification以上查询

有没有办法在不编写 2 个不同查询的情况下以其他方式做到这一点?

最佳答案

由于 source_id 字段可能链接到 3 个表之一,您可以选择

  1. 使用左连接,使用 source_id 字段连接通知表上的这 3 个表。根据 activity_type,您可以决定在应用程序代码的结果集中显示哪些字段。缺点:如果所有 3 个表中出现相同的 id,则查询将拉取不必要的数据。

  2. 为 3 个表创建 3 个查询,根据 activity_type 字段将每个源表连接到通知表,并将它们合并到一个联合查询中以获得单个结果集。

  3. 根据 3 个源表的内容,您可以选择非规范化并将事件的详细信息包含在通知表中,这样您就不必连接到源表。例如,如果 sy 成为另一个人的 friend ,那么您可以在通知表中显式存储 friend 的名字。

仅向好友显示通知相对容易,显示的所有通知都应由好友发起。您没有透露 friend 表的结构,但我猜您有 2 个与用户表 user_id 字段相关的字段。因此,使用您在内部加入通知表的 friend 表,就像您在显示用户 friend 的查询中所做的那样。

关于php - PHP中的通知系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091928/

相关文章:

php - 什么更快?在循环中触发查询或遍历数组?

mysql - 如何使用 mysql.server start 指定启动选项

php - 是否可以选择组/数组中的数据?

mysql - 新用户拥有MySQL 5.6的所有权限

mysql - 合并数据库查询

php - 在Google Analytics(分析)中跟踪Shoutcast流

php - 验证输入是否采用此时间格式 - "HH:MM"

javascript - 使用 AJAX 调用将 PHP 字符串数组转换为 Javascript 对象数组

java - 如何使用 JDO 和 DataNucleus 在 MySQL 5.5 中设置变量?

android 数据库已经关闭 onResume