[英]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.