【发布时间】: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",,这没有任何区别。