【问题标题】:How to use attributes as column name in where clause in PostgreSQL getting "distance" is not column如何在PostgreSQL的where子句中使用属性作为列名获取“距离”不是列
【发布时间】:2021-06-04 18:16:21
【问题描述】:

我已经尝试过这个答案中给出的建议,但得到了同样的错误https://stackoverflow.com/a/66134536/12761193

当我只使用订单时,它工作得很好

下面是原始的 sql 查询

SELECT "id", "firstName", "lastName", "photo", 6371 * acos(cos(radians(21.204578)) * cos(radians(latitude)) * cos(radians(72.838911) - radians(longitude)) + sin(radians(21.204578)) * sin(radians(latitude))) AS "distance" FROM "Users" AS "User" WHERE ("User"."id" != 1 AND "User"."distance" <= 29.7) ORDER BY "distance" ASC LIMIT 10 OFFSET 0;
db.User.findAll({
        attributes: ["id", "firstName", "lastName", "photo", [db.sequelize.literal("6371 * acos(cos(radians(" + latitude + ")) * cos(radians(latitude)) * cos(radians(" + longitude + ") - radians(longitude)) + sin(radians(" + latitude + ")) * sin(radians(latitude)))"), 'distance']],
        order: [[db.sequelize.literal(`"distance"`), 'ASC']],
        where: db.sequelize.where(db.sequelize.literal(`"distance" <= ${km} AND "id" != ${1}`)),
        limit,
        offset
    })
        .then(function (data) {
            console.log(data);
            res.json({
                response_code: 'SUCCESS',
                data: data
            });
        }).catch(err => {
            console.log(err);
            res.status(500).end();
        })

【问题讨论】:

  • 你用的是什么sequelize版本?
  • 续集版本为6.6.2

标签: node.js postgresql sequelize.js


【解决方案1】:

我能够使用以下文字解决这个问题

    db.User.findAndCountAll({
        attributes: ["id", "firstName", "lastName", "photo", [db.sequelize.literal("6371 * acos(cos(radians(" + latitude + ")) * cos(radians(latitude)) * cos(radians(" + longitude + ") - radians(longitude)) + sin(radians(" + latitude + ")) * sin(radians(latitude)))"), 'distance']],
        order: [[db.sequelize.literal(`"distance"`), 'ASC']],
        where: db.sequelize.literal(`6371 * acos(cos(radians(${latitude})) * cos(radians(latitude)) * cos(radians(${longitude}) - radians(longitude)) + sin(radians(${latitude})) * sin(radians(latitude))) <= ${km} AND "id" != ${req.userDetails.UserId}`),
        limit,
        offset
    })

【讨论】:

    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 2016-10-28
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多