MySQL查询丢失导致在phpMyAdmin中返回的node-mysql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL查询丢失导致在phpMyAdmin中返回的node-mysql相关的知识,希望对你有一定的参考价值。

当我在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}]
答案

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}]
另一答案

问题可能是您的列从两个表中被称为相同(距离和结果)。要使JSON有效,您必须没有重复的键,列的名称应该是唯一的。尝试将它们称为distance1,result1,distance2,result2

另一答案

对我来说,这是库中的一个错误,因为输出字段是有效且唯一的,但库不能正确处理文字点。

你应该得到s.resulthp.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: '...',
  }, ...]
  */
});

以上是关于MySQL查询丢失导致在phpMyAdmin中返回的node-mysql的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询在 PHP 中返回 0 行,在 phpmyadmin 中返回实际记录

mysql“日期之间”查询在 phpmyadmin 中有效,但 PDO 不返回任何内容

相同的mysql查询在phpmyadmin的不同时间给出不同的结果

仅在某些服务器中的 Mysql 查询错误

繁重的 mysql 视图打破了 phpmyadmin

使用 phpmyadmin 从文件导入表时丢失随机字段中的数据