首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Knex.js中使用MYSQL SET @

在Knex.js中使用MYSQL SET @
EN

Stack Overflow用户
提问于 2018-02-08 04:36:09
回答 1查看 963关注 0票数 1

我一直在浏览文档和在线,但没有找到一个例子或任何关于这方面的信息。

可以将SET与Knex.js一起使用吗?如果是这样,又是如何做到的呢?我想创建一个排名表,下面是一个教程中的查询示例。但是我不能开始工作。

代码语言:javascript
复制
SET @rank=0;

SELECT @rank:=@rank+1 AS rank, fruit, amount
  FROM sales
 ORDER BY amount DESC

巴马尔的回应让我走上了使用Knex.js进行排名的正确道路。以下是我为那些正在寻找的人提供的最后一条Knex.js语句。我可以创建表格并使用它列出列表。

代码语言:javascript
复制
let schoolId = req.params.id;

knex.select(knex.raw('@rank:=@rank+1 AS rank'),'schools.SID',
knex.raw('ROUND(AVG(IF(reviews.active = 1,((Q1+Q2+Q3+Q4+Q5+Q6+Q7+Q8+Q9+Q10)/(10*10)*10), NULL)) ,1) AS average'))
.from('schools')
.joinRaw('CROSS JOIN (SELECT @rank := 0) AS vars')
.rightJoin('reviews', 'reviews.schoolID', 'schools.SID')
.where('schools.schoolCountry', '=', 'China')
.groupBy('schools.SID')
.orderByRaw('schools.SID DESC, schools.schoolCountryCode ASC ')
.then(function (rank) {
    console.log(rank);
    res.locals.ranking = rank;
    next();
}).catch(function (error) {
    console.log(error);
    res.send('An error occured');
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-08 04:39:28

如果knex.js在查询之间保持数据库连接是打开的,那么它应该可以工作。变量只存在于数据库连接中,所以如果它为每个查询打开一个新连接,那么变量将在SETSELECT之间丢失。

但是,即使您可以做到这一点,更好的方法是在查询本身中初始化变量:

代码语言:javascript
复制
SELECT @rank := @rank + 1 AS rank, fruit, amount
FROM sales
CROSS JOIN (SELECT @rank := 0) AS vars
ORDER BY amount DESC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48672808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档