当我在phpMyAdmin中运行时,我的SQL查询返回四列,但在通过Node.js和mysql包执行时只返回两列。我怀疑它可能与异步性或LEFT JOIN有关,但我无法弄明白。
节点index.js:
app.get('/name', function (req,res){
var query='SELECT s.result, s.distance, hp.result, hp.distance FROM `table15` s LEFT JOIN `table14` hp on s.name = hp.name WHERE s.name = "John Appleseed"';
pool.query(query,function(err, result) {
if (err) throw err;
console.log(result);
res.json(result);
});
});
app.js
$.ajax({
url : "/name",
type : "GET",
success : function(data){
var len = data.length;
console.log(data);
}
});
在浏览器和控制台中返回:
[{result: "36:24", distance: 12}]
但是在phpMyAdmin中,我得到了四列,因此在浏览器中也会有这样的内容:
[{result: "00:35:29", distance: 12, result: "36:24", distance: 12}]
答案 0 :(得分:1)
对node.js
我不熟悉,我建议如下。尝试更改查询并向结果列添加名称。
示例强>
SELECT `s`.`result` AS `sResult`,
`s`.`distance` AS `sDistance`,
`hp`.`result` AS `hpResult`,
`hp`.`distance` AS `hpDistance` FROM `table15` `s`
LEFT JOIN `table14` `hp` on `s`.`name` = `hp`.`name`
WHERE `s`.`name` = "John Appleseed";
以上应输出
[{sResult: "00:35:29", sDistance: 12, hpResult: "36:24", hpDistance: 12}]
答案 1 :(得分:0)
对我来说,这是库中的一个错误,因为输出字段有效且唯一,但库不能正确处理文字点。
您应该获得s.result
和hp.result
但是您会在没有前缀的情况下覆盖变量:result
。
MySQL解决方案:使用别名 - SELECT s.result AS sresult, hp.result AS hpresult ...
。
node-mysql解决方案:使用nestTables
option for overlapping column names。
从链接页面复制:
var options = {sql: '...', nestTables: true};
connection.query(options, function (error, results, fields) {
if (error) throw error;
/* results will be an array like this now:
[{
table1: {
fieldA: '...',
fieldB: '...',
},
table2: {
fieldA: '...',
fieldB: '...',
},
}, ...]
*/
});
或者作为替换文字点的字符串:
var options = {sql: '...', nestTables: '_'};
connection.query(options, function (error, results, fields) {
if (error) throw error;
/* results will be an array like this now:
[{
table1_fieldA: '...',
table1_fieldB: '...',
table2_fieldA: '...',
table2_fieldB: '...',
}, ...]
*/
});
答案 2 :(得分:0)
问题可能是您的列从两个表中被称为相同(距离和结果)。 要使JSON有效,您必须没有重复的键,列的名称应该是唯一的。 尝试将它们称为distance1,result1,distance2,result2