如何从php监听sql表的变化并返回一个值?

vwhgwdsa  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(315)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

9个月前关门了。
改进这个问题
我用php编写了一个脚本,它的行为有点像队列。队列中的一组用户位于1行上,我在最后一列中有一个布尔值来表示行已满。当用户加入队列时,每一行的用户列都会被填满。你可以看看我的table,看看它是什么样子。

现在我的问题是,如何一次返回所有用户的数组 isfull = 1 ? 我知道如何去检索所有用户并将他们放入一个列表中,但是如何使所有客户机都在积极地等待/监听组被填满呢?
所有客户机都运行相同的php代码,因此理想情况下,我会在网站上为它们显示一个加载屏幕,当组被填满时,代码将返回一个json数组,然后用户列将被设置回null。什么php函数或库可以让我主动观看 isfull 列值更改为1时返回?
为了澄清,我已经编写了代码来插入用户、检查是否已满以及设置 isfull=1 ,但我不知道如何在行已满时将json返回给所有用户。如果只有user5可以看到 isfull == 1 那么json只会返回给他们,对吗?

mrphzbgm

mrphzbgm1#

假设您有一个函数为user1、user2、…、user5列添加值。此函数名为 addValueToUserColumn(columnNo, value) (第1、2、…、5栏)
现在,您必须首先确定在user1,…,user5列中添加值时还剩下多少列。要找出有多少列为空,请使用以下sql:

SELECT 
  ((CASE WHEN user1 IS NULL THEN 1 ELSE 0 END)
  + (CASE WHEN user2 IS NULL THEN 1 ELSE 0 END)
  ...
  ...
  + (CASE WHEN user5 IS NULL THEN 1 ELSE 0 END)) AS sum_of_nulls
FROM table
WHERE id=some_id

然后,检查 sum_of_nulls === 0 不管怎样。如果 sum_of_nulls === 0 ,然后调用另一个函数来更改 isFull . 我们调用这个函数 setIsFullColumn() :

function setIsFullColumn() {
  $sql = "sql to check if isFull is 1";
  if(isFull is already 1) {
    // then, just
    return false;
  }
  $sql = "sql to set isFull to 1";

  // now, set isFull to 1
  // and
  return true;
}

现在, setIsFullColumn() 返回true,则可以将json数组发送给所有用户。
所以,我们可以说 addValueToUserColumn() 可能是:

function addValueToUserColumn($columnNo, $value) {
  $sql = "add value to user column using columnNo";
  // ad value to db table

  // now,
  $sql = "the previous sql i've provided for finding out sum_of_nulls";
  // so, find out sum nulls

  // now, if sum of nulls is 0, then
  if($sum_of_nulls === 0) {
    $status = setIsFullColumn();
    if($status === true) { // that means, you just set "isFull = 1"
      // send json array to every user;
    }
  }
}

现在,由于这4个用户已经与服务器断开连接,您将如何向所有5个用户发送数据
为此,我们采用了服务器推送技术。不幸的是,这个答案部分太小,无法讨论服务器推送。你可以在这里阅读推送技术。推送技术允许将数据从web服务器发送到客户端。引自维基百科:
http服务器推送(也称为http流)是一种将未经请求的(异步)数据从web服务器发送到web浏览器的机制。http服务器推送可以通过几种机制中的任何一种实现。

ifmq2ha2

ifmq2ha22#

这是一个轻微的带宽妓女,但我这样做是为了一个聊天应用程序,我用php和jquery。您可以使用内置的js函数 setInterval(function,milliseconds) 每x毫秒运行一个函数。
该函数需要对php脚本运行jquery get请求,该脚本读取并返回isfull是0还是1,并且可以告诉客户端它需要执行操作的信息。
因此,如果他们的队列已满,它可以告诉他们,然后你可以加载他们或做任何你需要的事情。

相关问题