【问题标题】:NodeJS Complex Mysql Query with Aliases?带别名的 NodeJS 复杂 Mysql 查询?
【发布时间】:2021-04-26 19:55:50
【问题描述】:

这是我在 NodeJS 中使用的一个简单的 MySQL 查询,效果很好;

Audiopost.getAll = result => {
  sql.query("SELECT * FROM audioposts", (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(null, err);
      return;
    }

    console.log("audioposts: ", res);
    result(null, res);
  });
};

但是,当我尝试用更复杂的查询替换“SELECT * FROM audioposts”语句时,我得到了;

SyntaxError: Invalid or unexpected token.

这是来自 PHP 页面的更复杂的查询;

SELECT
    ap.audioname, 
    ap.userid, 
    ap.audioid, 
    ap.title, 
    ap.likes,
    ap.opid,
    u.gavatar, 
    u.name, 
    u.email,
    u.bio,
    (
        SELECT GROUP_CONCAT(t.tagname)
        FROM entitytag et
        LEFT JOIN tags t on t.tagid = et.tagid
        WHERE et.audioid = ap.audioid
    ) tagname,
    (
      SELECT count(*) FROM audioposts op WHERE op.opid = ap.audioid
    ) as replycount
        FROM audioposts ap 
        LEFT JOIN users u ON u.id = ap.userid
      WHERE ap.opid = '0'

我可以在 nodeJS 的 SQL 代码中使用别名吗?我究竟做错了什么?如何执行此查询?

【问题讨论】:

  • 是的,您也可以在节点上运行任何有效的查询。请显示您的实际代码,而不是描述您要替换的内容。您看到的错误不是 SQL 而是 JS,因此您可能在替换过程中遗漏了一些东西。

标签: mysql sql node.js select


【解决方案1】:

javascript 中的单引号和双引号字符串中不允许有换行符。您需要将所有换行符替换为 \n 或使用反引号而不是引号来定义您的字符串。反引号 (`) 创建一个允许换行符的模板文字。

let query = `
SELECT
    ap.audioname, 
    ap.userid, 
    ap.audioid, 
    ap.title, 
    ap.likes,
    ap.opid,
    u.gavatar, 
    u.name, 
    u.email,
    u.bio,
    (
        SELECT GROUP_CONCAT(t.tagname)
        FROM entitytag et
        LEFT JOIN tags t on t.tagid = et.tagid
        WHERE et.audioid = ap.audioid
    ) tagname,
    (
      SELECT count(*) FROM audioposts op WHERE op.opid = ap.audioid
    ) as replycount
        FROM audioposts ap 
        LEFT JOIN users u ON u.id = ap.userid
      WHERE ap.opid = '0'
`;

sql.query(query, (err, res) => {/* ... */})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多