【问题标题】:MySQL Query returns Just One Row instead of All Rows at NodeJS Endpoint?MySQL Query 在 NodeJS 端点只返回一行而不是所有行?
【发布时间】:2021-05-13 10:47:24
【问题描述】:

我有这个 NodeJS 端点,它应该从 MySQL 数据库中获取对帖子编号 201 的所有回复。

 http://mysite:3000/getreplies/201

这是创建端点的 NodeJS 代码;

app.get("/getreplies/:repliesId", audioposts.findReplies);

exports.findReplies = (req, res) => {
  Audiopost.findByOpId(req.params.repliesId, (err, data) => {
    if (err) {
      if (err.kind === "not_found") {
        res.status(404).send({
          message: `Not found Replies with id ${req.params.repliesId}.`
        });
      } else {
        res.status(500).send({
          message: "Error retrieving Audiopost with id " + req.params.audiopostId
        });
      }
    } else res.send(data);
  });
};

这是 MySQL 选择查询;

Audiopost.findByOpId = (repliesId, result) => {
  sql.query(`  
   SELECT
    ap.audioname, 
    ap.userid, 
    ap.audioid, 
    ap.title, 
    ap.likes,
    ap.opid,    
    u.gavatar, 
    u.name, 
    u.email,
       (
        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 AS apost WHERE apost.opid = ap.audioid
    ) as replycount
FROM audioposts ap 
LEFT JOIN users u ON u.id = ap.userid
WHERE ap.opid = ${repliesId}  
  `, (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(err, null);
      return;
    }

    if (res.length) {
      console.log("found audiopost: ", res[0]);
      result(null, res[0]);
      return;
    }
      result({ kind: "not_found" }, null);
  });
};

查询本身似乎很好。但是为什么端点只返回第一行而不是所有行呢?

【问题讨论】:

    标签: mysql node.js endpoint


    【解决方案1】:
        Audiopost.findByOpId = (repliesId, result) => {
      sql.query(`  
       SELECT
        ap.audioname, 
        ap.userid, 
        ap.audioid, 
        ap.title, 
        ap.likes,
        ap.opid,    
        u.gavatar, 
        u.name, 
        u.email,
           (
            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 AS apost WHERE apost.opid = ap.audioid
        ) as replycount
    FROM audioposts ap 
    LEFT JOIN users u ON u.id = ap.userid
    WHERE ap.opid = ${repliesId}  
      `, (err, res) => {
        if (err) {
          console.log("error: ", err);
          result(err, null);
          return;
        }
    
        if (res.length) {
         
          result(null, res);
          return;
        }
          result({ kind: "not_found" }, null);
      });
    };
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多