Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize查询从表中选择*只返回一行_Javascript_Sql_Node.js_Postgresql_Sequelize.js - Fatal编程技术网

Javascript Sequelize查询从表中选择*只返回一行

Javascript Sequelize查询从表中选择*只返回一行,javascript,sql,node.js,postgresql,sequelize.js,Javascript,Sql,Node.js,Postgresql,Sequelize.js,我目前正在使用PostgreSQL和Sequelize.js查询一些数据。当我使用sequelize.query()时,它只返回一行数据,但当我通过pgAdmin输入数据时,它会按预期工作 下面是我在sequelize.query()中使用的代码 这是nodejs代码 const getRank = (option, logs = {}) => new Promise(async (resolve, reject) => { try { let { offset, lim

我目前正在使用PostgreSQL和Sequelize.js查询一些数据。当我使用sequelize.query()时,它只返回一行数据,但当我通过pgAdmin输入数据时,它会按预期工作

下面是我在sequelize.query()中使用的代码

这是nodejs代码

const getRank = (option, logs = {}) => new Promise(async (resolve, reject) => {
  try {
    let { offset, limit } = option;
    if (!limit) limit = 10;
    const result = await sequelize.query(
      `SELECT table2.student_id,
              s.canvasser_name,
              l.level_name,
              table2.total_score
       FROM (SELECT table1.student_id,
                    sum(table1.max_score) total_score
             FROM (SELECT sq.student_id,
                   max(sq.score) max_score
                   FROM public.student_quiz sq
                   GROUP BY sq.quiz_id, sq.student_id) table1
             GROUP BY table1.student_id) table2
       INNER JOIN public.student s
               ON s.id = table2.student_id
       INNER JOIN public.level l
               ON l.id = s.level_id
       ORDER BY table2.total_score DESC
       LIMIT 10;`,
      { plain: true }
    );

    return resolve(result);
  } catch (error) {
    let customErr = error;
    if (!error.code) customErr = Helpers.customErrCode(error, null, undefinedError);
    logger.error(logs);
    return reject(customErr);
  }
});
下面是使用上述函数的代码

const getRankController = async (req, res) => {
  try {
    const { offset, limit } = req.query;
    const result = await getRank({ offset, limit });

    if (result.length < 1) {
      return Helpers.response(res, {
        success: false,
        message: 'cannot get score list'
      }, 404);
    }

    return Helpers.response(res, {
      success: true,
      result
    });
  } catch (error) {
    return Helpers.error(res, error);
  }
};
这一个不起作用,因为它是嵌套函数,我不知道如何复制它

我试着做一些简单的查询,比如SELECT*FROM table,它返回一行,然后我发现我需要在表名中添加“public”,这样它就变成了SELECT*FROM public.table,结果就成功了。在我尝试第二个代码块中的代码之前


任何回答或建议都将不胜感激,谢谢。

我想您需要指出一种查询类型,并删除如下
plain:true
选项:

const result = await sequelize.query(
      `SELECT table2.student_id,
              s.canvasser_name,
              l.level_name,
              table2.total_score
       FROM (SELECT table1.student_id,
                    sum(table1.max_score) total_score
             FROM (SELECT sq.student_id,
                   max(sq.score) max_score
                   FROM public.student_quiz sq
                   GROUP BY sq.quiz_id, sq.student_id) table1
             GROUP BY table1.student_id) table2
       INNER JOIN public.student s
               ON s.id = table2.student_id
       INNER JOIN public.level l
               ON l.id = s.level_id
       ORDER BY table2.total_score DESC
       LIMIT 10;`,
      { 
        type: Sequelize.QueryTypes.SELECT
      }
    );
从Sequelize文档:

options.plain - Sets the query type to SELECT and return a single row

似乎您的表位于
Public
schema中,因此它在您选择带有schema的表时起作用name@JimMacaulay我明白了,你知道为什么它只返回一行吗。我的意思是,如果它不返回任何值,我就会得到它,但为什么它只返回一个呢?也许问题出在sequelize代码中。把它添加到问题中是个好主意。@bjarniranarsson打得好,我已经更新了。请看一看。您是否尝试在
返回解析(结果)处设置断点然后看什么是
结果
内容?添加了它,这里仍然没有运气。伙计,你不会相信我一直在寻找这个答案。非常感谢你,你是最棒的。
const result = await sequelize.query(
      `SELECT table2.student_id,
              s.canvasser_name,
              l.level_name,
              table2.total_score
       FROM (SELECT table1.student_id,
                    sum(table1.max_score) total_score
             FROM (SELECT sq.student_id,
                   max(sq.score) max_score
                   FROM public.student_quiz sq
                   GROUP BY sq.quiz_id, sq.student_id) table1
             GROUP BY table1.student_id) table2
       INNER JOIN public.student s
               ON s.id = table2.student_id
       INNER JOIN public.level l
               ON l.id = s.level_id
       ORDER BY table2.total_score DESC
       LIMIT 10;`,
      { 
        type: Sequelize.QueryTypes.SELECT
      }
    );
options.plain - Sets the query type to SELECT and return a single row