我希望使用maxtime标记值在我的数据库中获取最新记录。 db布局列在下面
这是我的代码,包括我正在运行的查询以检索所需的行
var mysql = require("mysql");
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'database',
database : 'airplanemap'
});
connection.connect(function (err) {
if(err) {
console.error('error connecting' + err.stack);
return;
}
console.log('connected as id' + connection.threadId);
connection.query('SELECT name, baggageno, destination, max(ts) FROM map', function (err, results, fields) {
if(err) {
console.error(err.stack);
return;
}
if(results.length > 0) {
var myresult = results[0];
console.log('results ' + myresult['name'] + ' ' + myresult['baggageno'] + ' ' + myresult['destination'] + ' ' + myresult['max(ts)']);
}
else
{
console.log('no results');
}
})
});
我收到的结果是
jane 2 new york Sat Mar 14 2015 02:25:03 GMT-0400
从此返回最高时间戳,但是name,baggageno和destination
的列值错误应该是
john 5 toronto星期六三月14 2015 02:25:03 GMT-0400
我做错了什么?
编辑:我期望结果数组中的一行值表中具有最新时间戳的行。
答案 0 :(得分:1)
目前您的查询返回4行:
[
{ name: 'john', baggageno: 5, destination: 'toronto', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
{ name: 'jill', baggageno: 1, destination: 'karachi', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
{ name: 'jane', baggageno: 2, destination: 'new york', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
{ name: 'jim', baggageno: 5, destination: 'glasgow', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
]
并且您从该结果集中选择了第一行,这就是为什么您会看到您所看到的内容(尽管行的排序取决于服务器,因为您没有要求特定的订购)。
如果您尝试查找具有最新ts
值的记录,则需要添加某种过滤器。例如,使用连接可能类似于:
SELECT map.*
FROM map
LEFT JOIN map map2 ON map.name = map2.name
AND map.baggageno = map2.baggageno
AND map.destination = map2.destination
AND map.ts < map2.ts
WHERE map2.name IS NULL
如果你想这样做,你也可以做类似的事情,除了使用内部联接。