【问题标题】:node.js javascript mysql query wait unitl next row is insertednode.js javascript mysql查询等到下一行插入
【发布时间】:2012-11-23 10:36:52
【问题描述】:

有什么方法可以停止对 mysql 表的 javascript 查询并等待下一行插入?

例如使用函数:

var query = connection.query('SELECT * FROM table');

我想读取表中的所有行,显示它们并等到插入下一行,读取插入的行并等到插入其他行,依此类推...

基本上它应该读取每次其他表从 PHP 或其他脚本(触发事件)更新时更新的表。

我在javascript mysql查询中找不到任何关于光标滑动的信息,也许有一些关于它的文章?

【问题讨论】:

  • 所以基本上你想让 JavaScript 知道何时插入新行?为什么不将您的功能与插入行的功能挂钩?这样,您始终知道何时放置新行。
  • 嗯,我正在读取由另一个表更新的 mysql 触发器创建的表。基本上我想显示实时更新。它们是由 PHP 脚本创建的
  • 那么如果您在帖子中解释说您不是唯一使用数据库的人并希望从中获取更新会更好。否则,每个人都可以假设只有您的应用在使用它。
  • 解释一下其他应用在做什么?
  • 不,只是说明有其他程序在使用它。

标签: javascript mysql node.js


【解决方案1】:

你可以像这样轮询答案,因为我从来没有使用过 mysql 库来做节点。

行计数间隔
var 连接 = ..., 最后一个;

funciton mysqlPoll() {
    var query = connection.query('SELECT count(field) as count FROM table');

    query.exec(function(result) {
        if (result.count != lastCount) {
            //Select all the rows here using offset to skip the already processes
            //process them
            lastCount = result.count;
        }
    });
}

setInterval(mysqlPoll, 500); //every 1/2 second

如果你有一个主自动递增键间隔会更好

var connection = ...,
    lastCount = 0;

funciton mysqlPoll() {
    var query = connection.query('SELECT * FROM table WHERE primaryId > '+lastCount);

    query.exec(function(result) {
        if (result.count != lastCount) {
            //Select all the rows here using offset to skip the already processes
            //process them
            lastCount = lastResultsPrimaryId;
        }
    });
}

setInterval(mysqlPoll, 500); //every 1/2 second

另一种选择是在 node.js 上打开一个套接字(网络、http 等)并从 php 脚本对其执行 ping 操作以触发更新。

希望有帮助

【讨论】:

  • 感谢您的帮助。我知道 MySQL 不是与 js 一起使用的最佳选择,也许您知道一些支持逻辑连接的数据库(我在一个 SELECT 中有两个 SELECT )并且还有例如可尾游标和像 MongoDB 这样的 oplog 事件?
  • 你看过github.com/1602/jugglingdb它允许你在api下使用任何数据库。在不知道数据结构以及您尝试做什么的情况下,我很难帮助确定正确的数据库
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2014-06-21
  • 2012-04-21
相关资源
最近更新 更多