【问题标题】:Find value of returned Query-object using node-mysql in Node.js在 Node.js 中使用 node-mysql 查找返回的查询对象的值
【发布时间】:2011-12-19 13:53:46
【问题描述】:

我正在为 Node.js 使用 felixge 的 node-mysql 插件。我想在我的数据库中找到最高的 ID,所以我使用:

client.query(
"SELECT MAX('hits_total') FROM " + TABLE,
function (err, results, fields) {
    if(err) {
        throw err;
    }
    console.log(results);
    console.log(fields);
}

);

但是如何找到结果的?控制台日志:

    { 'MAX(\'hits_total\')': 
   { length: 39,
     received: 39,
     number: 2,
     type: 4,
     catalog: 'def',
     name: 'MAX(\'hits_total\')',
     charsetNumber: 192,
     fieldLength: 30,
     fieldType: 253,
     flags: 0,
     decimals: 31 } }
{"MAX('hits_total')":"hits_total"}

所以我得到了一个结果,但是我找不到它的值(在这种情况下是 633)。

如果有人可以帮助我或为我指明正确的方向,那就太好了:D


编辑

好的,我又做了一些测试,似乎"SELECT MAX('hits_total') FROM " + TABLE,的语法有问题

我可以知道,因为当我将其更改为,例如:

"SELECT * FROM " + TABLE + " WHERE id=200"

它突然返回一个有效对象:

{ id: 200, hits_total: 102 }

所以也许 MAX('whatever_field') 还不支持?我怎样才能知道,是否有替代方案可以达到相同的效果?


另一个编辑> 我无法在 8 小时内回答我自己的问题,所以这里是:

好的,我找到了解决办法。

如前所述,语法 ("SELECT MAX('hits_total') FROM " + TABLE 出于某种原因不会返回有用的对象。

因此,我使用了这种语法(为了完整起见,我将粘贴整个块):

var hits = 0;
var query = client.query("SELECT * FROM hits ORDER BY hits_total DESC LIMIT 1");
query
    .on('row', function(row) {
        console.log("(row)");
        hits = row.hits_total;
    })
    .on('end', function(result) {
        console.log("(end)");
    });

query.on('row', callback(row){}); 返回的行对象具有该行的字段名作为属性 - 在本例中为 .hits_total

【问题讨论】:

  • 您确定 TABLE 已设置吗?我以前在使用node-mysql时从来没有发生过这种情况,你的代码肯定有问题。
  • TABLE 已设置,但为了确保我也尝试将 ... FROM " + TABLE", 替换为 ... FROM hits",,这没有任何区别。

标签: mysql node.js


【解决方案1】:

results 如果实际返回行,则应该是一个数组。在这种情况下,它看起来像是在返回其他东西。

问题在于您的查询,而不是您的代码。你在“hits_total”周围有单引号,所以它实际上是一个字符串的最大值。去掉单引号,或者将它们改为反引号,然后它将字符串作为列名处理。

client.query("SELECT MAX(hits_total) FROM " + TABLE, function (err, results, fields) {
  if (err) {
    throw err;
  }
  console.log(results);
  console.log(fields);
});

【讨论】:

  • 我切换了console.log(max);max = row["MAX('hits_total')"],否则它只会记录'null'。无论如何,"MAX('hits_total')" 被简单地记录为hits_total。它不记录实际值。会不会是我在 MySQL 中设置了错误的字段类型?它设置为 INT。
  • 说真的,这是围绕“hits_total”的引号? :o
  • 谢谢,你确实是对的。我发布的解决方案也有效,所以我没有改回来,但你的答案是正确的:)。
猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2014-10-18
  • 2020-11-05
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多