discordjs
mysqlパッケージを使用してSQLクエリを作成しようとしています。クエリ(SQLサーバーで使用されている場合)は意図したとおりに完全に機能しPARSE ERROR
ますが、jsで同じクエリを使用しようとしています:
SET @ROW_NUMBER = 0; SELECT s.level,s.exp,s.number
FROM ( SELECT userID,level,exp,(@ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number FROM levels ORDER BY level DESC) AS s
WHERE userID = "${userID}";
discordjsのコード:
//some code...
con.query(`SET @ROW_NUMBER = 0; SELECT s.level,s.exp,s.number
FROM ( SELECT userID,level,exp,(@ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number
FROM levels ORDER BY level DESC) AS s
WHERE userID ="${userID}";`,(err,rows) =>{
if(err)return console.log(err);
//other code
私が得るエラー:
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near 'SELECT s.level,s.exp,s.number FROM ( SELECT userID ,level ,exp ,(@ROW_NUMBER:...' at line 1",
sqlState: '42000',
index: 0,
sql: 'SET @ROW_NUMBER = 0; SELECT s.level,s.exp,s.number FROM ( SELECT
userID ,level ,exp ,(@ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number FROM levels
ORDER BY level DESC) AS s WHERE userID = "258217948819357697";'
エラーメッセージは、コネクタがマルチクエリを許可していないことを示しています(2つのクエリが1つのバッチとして送信されます)。
変数の初期化をFROM句に移動します。
SELECT s.level,s.exp,s.number
FROM ( SELECT userID, level, exp, ( @ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number
FROM levels, (SELECT @ROW_NUMBER := 0) init_variable
ORDER BY level DESC ) AS s
WHERE userID = "${userID}";
PS。MariaDBのバージョンが10.2.1以降の場合は、変数の代わりにCTEでROW_NUMBER()ウィンドウ関数を使用してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加