【问题标题】:How to create notifications through php and ajax?如何通过 php 和 ajax 创建通知?
【发布时间】:2017-06-23 11:23:41
【问题描述】:

我有一个数据库,当插入它时应该在网页中创建一个通知。我在这里所做的是通过 ajax 进行轮询。我执行一个查询,该查询选择时间戳小于当前时间 3 秒的行。 这是我的代码- HTML 文件:

    <html>
    <head>
    <title>Dashboard</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3                    /jquery.min.js"></script>
    </head>
    <body>
        <div id="responsecontainer"></div>

        <script type="text/javascript">
           $( document ).ready(function() {
           setInterval(ajaxcall, 500);

           function ajaxcall() {
            $.ajax({
            type: "GET",
            url: "maintdashsubmit.php",             
            dataType: "html",   //expect html to be returned                
            success: function(response){                   
                $("#responsecontainer").append(response); 
            }
           });}
           });
         </script>
    </body>
    </html>

PHP 文件:

    <?php
    session_start();

    $link = mysqli_connect("localhost", "root", "*****", "DMRC");

    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit(); 
    }

    $sql = "SELECT * FROM Ticket, Station, user_auth WHERE TIME(ticket_open_datetime) BETWEEN curtime()-3 AND curtime() AND Ticket.ticket_station_id = Station.station_id AND Ticket.ticket_open_emp_id = user_auth.emp_id AND Ticket.ticket_close_open='open" ;

    $result = $link->query($sql);
    if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()){
        echo "<tr><td style='width:15%''>".$row['ticket_id']."</td><td><table><tr><td>".$row['ticket_equipment']."</td></tr><tr><td>".$row['ticket_equipment_id']."</td></tr></table></td><td>".$row['station_name']."</td><td><table><tr><td>".$row['emp_firstname']." ".$row['emp_lastname']."</td></tr><tr><td> Sec:".$row['emp_section']."</td></tr><tr><td>".$row['emp_id']."</td></tr></table></td><td>".$row['ticket_close_open']."</td></tr>";
        }
    }

    $link->close();
    ?>

这为我提供了我想查看的最新通知。但只要保持在 0.5 秒的时间限制内,它就会显示多次。 我读到我可以在数据库中保留一列,如果通知已显示,则可以设置为 1,如果没有,则设置为 0。

但我有一个疑问。假设这个通知必须被许多用户接收。如果向一个用户显示通知会在另一个用户查看之前设置列条目 1 怎么办?这一切都太混乱了。如果有人可以建议一种方法?

【问题讨论】:

  • 如果您想跟踪每个用户的通知显示,请跟踪每个用户。在用户和通知之间创建一个多对多表,用于跟踪哪些用户查看了哪些通知。
  • 用 user_id 将它们存储在数据库中,并将当前用户的状态更新为 1,简单
  • 但是如果我的用户数达到 100 个,那会不会太多条目?
  • @AkritiAnand:数据库能够存储大量数据。 “数百条记录”与“无记录”在统计上无法区分。
  • @AkritiAnand David 是对的,要跟踪很多东西,你必须把它们保存在数据库中

标签: javascript php html mysql ajax


【解决方案1】:

如果向一个用户显示通知会在另一个用户查看之前设置列条目 1?

听起来您正在寻找的东西被称为“多对多”关系。假设您有用户表和通知表:

Users
----------
ID
Username
etc.

Notifications
----------
ID
MessageBody
etc.

如果每个通知可以被很多用户看到,并且每个用户可以看到很多通知,并且您想要跟踪有关该交互的一些信息(用户是否看过通知),那么您需要一个链接表他们。像这样的:

UserNotifications
----------
UserID
NotificationID
HasBeenSeen
etc.

(你可以给这个表自己的ID,或者你可以使用UserIDNotificationID的组合作为复合主键。任何一种方式都有效,这取决于你。)

对于多对多关系,您需要在相关的两个实体之间建立这样的“链接表”。在该表中,您将跟踪有关关系本身的信息,在这种情况下将包括用户是否已看到通知。

如果您预计此表会随着时间的推移显着增长,您可以采取多种措施来稍微修改该方法。例如,您是否需要永久保留这些事物的历史?也许在查看记录后删除记录?通知本身会被删除吗?如果是这样,您还将连同它们一起删除这些链接记录。或者,该表可能不存储用户是否已看到通知,而是存储用户仍需要查看的通知。然后可以看到,记录被删除了。

您可以采取多种方法来解决整体问题。但要解决这里提出的具体问题,您需要跟踪信息的是一个多对多链接表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2013-11-14
    • 2022-01-03
    • 2013-12-15
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多