我一直在浏览文档和在线,但没有找到一个例子或任何关于这方面的信息。
可以将SET与Knex.js一起使用吗?如果是这样,又是如何做到的呢?我想创建一个排名表,下面是一个教程中的查询示例。但是我不能开始工作。
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, fruit, amount
FROM sales
ORDER BY amount DESC巴马尔的回应让我走上了使用Knex.js进行排名的正确道路。以下是我为那些正在寻找的人提供的最后一条Knex.js语句。我可以创建表格并使用它列出列表。
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');
});发布于 2018-02-08 04:39:28
如果knex.js在查询之间保持数据库连接是打开的,那么它应该可以工作。变量只存在于数据库连接中,所以如果它为每个查询打开一个新连接,那么变量将在SET和SELECT之间丢失。
但是,即使您可以做到这一点,更好的方法是在查询本身中初始化变量:
SELECT @rank := @rank + 1 AS rank, fruit, amount
FROM sales
CROSS JOIN (SELECT @rank := 0) AS vars
ORDER BY amount DESChttps://stackoverflow.com/questions/48672808
复制相似问题