[英]Using MYSQL SET @ in Knex.js
我一直在瀏覽文檔和在線,但是找不到相關的示例或任何信息。
可以將SET與Knex.js一起使用嗎? 如果是這樣,怎么辦? 我想創建一個排序表,這是教程中的示例查詢。 但是我不能讓SET工作。
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, fruit, amount
FROM sales
ORDER BY amount DESC
Barmar的回應使我使用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');
});
如果knex.js
保持查詢之間的數據庫連接打開,它應該可以工作。 變量僅在數據庫連接中保留,因此,如果它為每個查詢打開一個新連接,則變量將在SET
和SELECT
之間丟失。
但是,即使可以做到,更好的方法是在查詢本身中初始化變量:
SELECT @rank := @rank + 1 AS rank, fruit, amount
FROM sales
CROSS JOIN (SELECT @rank := 0) AS vars
ORDER BY amount DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.