我试图在一个查询中用新数据更新我的mysql数据库的10行。 我在此处MYSQL - UPDATE multiple rows with different values in one query和此处SQL string value spanning multiple lines in query以及此处SQL Server: CASE WHEN OR THEN ELSE END => the OR is not supported对此进行了研究。 我在名为'mt5'的表格中有一个列'对'和'价格'。当变量$ res [number]保持价格的新值时,只有当数据库寄存器大于其现有值时,价格才会增加数据库寄存器。 此类型布局有效:
$q = "UPDATE MT5 SET price = CASE WHEN '$res[10]' > price THEN '$res[10]' ELSE price END WHERE pair in ('EUR/USD')";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));// Register the values & redirect:
$q = "UPDATE MT5 SET price = CASE WHEN '$res[11]' > price THEN '$res[11]' ELSE price END WHERE pair in ('USD/JPY')";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));// Register the values & redirect:
但我需要在一个查询中拥有它。像这样:(但这不起作用,见下文)
$q = "UPDATE MT5 SET price = (CASE WHEN '$res[10]' > price THEN '$res[10]'
WHEN '$res[11]' > price THEN '$res[11]'
WHEN '$res[12]' > price THEN '$res[12]'
WHEN '$res[13]' > price THEN '$res[13]'
WHEN '$res[14]' > price THEN '$res[14]'
WHEN '$res[15]' > price THEN '$res[15]'
WHEN '$res[16]' > price THEN '$res[16]'
WHEN '$res[17]' > price THEN '$res[17]'
WHEN '$res[18]' > price THEN '$res[18]'
WHEN '$res[19]' > price THEN '$res[19]'
END)
WHERE pair in ('EUR/USD', 'USD/JPY', 'GBP/USD', 'EUR/GBP', 'USD/CHF', 'EUR/JPY', 'EUR/CHF', 'USD/CAD', 'AUD/USD', 'GBP/JPY')";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));// Register the values & redirect:
现在它只是将第一个值放入列价格的所有单元格中(所有单元格都具有$ res [10]的值。我做错了什么。我也尝试了将'ELSE price'添加到最后,像这样:
WHEN '$res[12]' > price THEN '$res[12]' ELSE price
下一行同样....我尝试了其他各种方法,他们大多不输入任何内容并给出错误。
答案 0 :(得分:1)
尝试在case
表达式中包含配对条件。
"UPDATE MT5 SET price =
(CASE WHEN '$res[10]' > price and pair = 'EUR/USD' THEN '$res[10]'
WHEN '$res[11]' > price and pair = 'USD/JPY' THEN '$res[11]'
WHEN '$res[12]' > price and pair = 'GBP/USD' THEN '$res[12]'
WHEN '$res[13]' > price and pair = 'EUR/GBP' THEN '$res[13]'
WHEN '$res[14]' > price and pair = 'USD/CHF' THEN '$res[14]'
WHEN '$res[15]' > price and pair = 'EUR/JPY' THEN '$res[15]'
WHEN '$res[16]' > price and pair = 'EUR/CHF' THEN '$res[16]'
WHEN '$res[17]' > price and pair = 'USD/CAD' THEN '$res[17]'
WHEN '$res[18]' > price and pair = 'AUD/USD' THEN '$res[18]'
WHEN '$res[19]' > price and pair = 'GBP/JPY' THEN '$res[19]'
END)
WHERE pair in ('EUR/USD', 'USD/JPY', 'GBP/USD', 'EUR/GBP',
'USD/CHF', 'EUR/JPY', 'EUR/CHF', 'USD/CAD', 'AUD/USD', 'GBP/JPY')";