簡體   English   中英

如何在帶有 Javascript/node.js 的 SQL 語句中使用 MySQL 變量?

[英]How do I use MySQL variables in a SQL statement with Javascript/node.js?

我在 javascript 中有一個 MySQL 查詢通過節點運行,這給我一個錯誤。

當我將 queryString 打印到控制台並將其粘貼到 MySQL 時,它工作正常,但是當我在控制台中打印錯誤時,它說存在語法錯誤。

我想我已經縮小了范圍,但我不知道它為什么會發生或如何解決它。

這是完整的 SQL 查詢:

set @csum := 0;
set @csum2 := 0;
set @csum3 := 0;
SELECT
    r.meeting_date,
    r.user_mode,
    (@csum:=@csum + r.total_profit) AS total_profit,
    (@csum2:=@csum2 + r.ev) AS ev,
    (@csum3:=@csum3 + r.bets) AS bets
FROM
    (SELECT
        meeting_date,
            user_mode,
            ROUND(SUM(profit)) AS total_profit,
            ROUND(SUM(bsp_profit)) AS total_bsp_profit,
            ROUND(SUM(est_ev)) AS ev,
            SUM(win) AS wins,
            COUNT(race_id) AS bets,
            ROUND(SUM(win) / COUNT(race_id), 2) * 100 AS hit_rate,
            ROUND(SUM(profit) / COUNT(race_id), 2) AS ppr,
            ROUND((SUM(win) / COUNT(race_id)) / (COUNT(race_id) / SUM(num_runners)), 2) AS iv
    FROM
        qs_historic_races
    WHERE
        user_mode = 1
    GROUP BY meeting_date , user_mode) AS r
ORDER BY meeting_date;

如果我刪除變量並刪除累積總和,那么它可以正常工作 - 但沒有它們查詢就不好 - 所以刪除這些行:

set @csum := 0;
set @csum2 := 0;
set @csum3 := 0;

(@csum:=@csum + r.total_profit) AS total_profit,
(@csum2:=@csum2 + r.ev) AS ev,
(@csum3:=@csum3 + r.bets) AS bets

這是打印的整個錯誤:

0|server   |    'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'set @csum2 := 0;\nset @csum3 := 0;\nSELECT\n    r.meeting_date,\n    r.user_mode,\n  \' at line 2',
0|server   |   sqlState: '42000',
0|server   |   index: 0,
0|server   |   sql:
0|server   |    'set @csum := 0;\nset @csum2 := 0;\nset @csum3 := 0;\nSELECT\n    r.meeting_date,\n    r.user_mode,\n    (@csum:=@csum + r.total_profit) AS total_profit,\n    (@csum2:=@csum2 + r.ev) AS ev,\n    (@csum3:=@csum3 + r.bets) AS bets\nFROM\n    (SELECT\n        meeting_date,\n            user_mode,\n            ROUND(SUM(profit)) AS total_profit,\n            ROUND(SUM(bsp_profit)) AS total_bsp_profit,\n            ROUND(SUM(est_ev)) AS ev,\n            SUM(win) AS wins,\n            COUNT(race_id) AS bets,\n            ROUND(SUM(win) / COUNT(race_id), 2) * 100 AS hit_rate,\n            ROUND(SUM(profit) / COUNT(race_id), 2) AS ppr,\n            ROUND((SUM(win) / COUNT(race_id)) / (COUNT(race_id) / SUM(num_runners)), 2) AS iv\n    FROM\n        qs_historic_races\n    WHERE\n        user_mode = 1\n    GROUP BY meeting_date , user_mode) AS r\nORDER BY meeting_date;' }

我一直在為此撓頭好幾個小時,所以感謝您的幫助

刪除所有 \n ,一切正常。

set @csum := 0;set @csum2 := 0;set @csum3 := 0;SELECT    r.meeting_date,    r.user_mode,    (@csum:=@csum + r.total_profit) AS total_profit,    (@csum2:=@csum2 + r.ev) AS ev,    (@csum3:=@csum3 + r.bets) AS bets FROM    (SELECT        meeting_date,            user_mode,            ROUND(SUM(profit)) AS total_profit,            ROUND(SUM(bsp_profit)) AS total_bsp_profit,            ROUND(SUM(est_ev)) AS ev,            SUM(win) AS wins,            COUNT(race_id) AS bets,            ROUND(SUM(win) / COUNT(race_id), 2) * 100 AS hit_rate,            ROUND(SUM(profit) / COUNT(race_id), 2) AS ppr,            ROUND((SUM(win) / COUNT(race_id)) / (COUNT(race_id) / SUM(num_runners)), 2) AS iv    FROM        qs_historic_races    WHERE       user_mode = 1    GROUP BY meeting_date , user_mode) AS r ORDER BY meeting_date;

我認為問題是因為它正在處理集合@csum:= 0; 作為一個單獨的查詢。 我已經重寫了沒有設置變量的查詢並且它有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM