SGBD是MySQL。 我在A列上有一个带有UNIQUE索引的表。 重复时,我想应用此规则:
$basePrices = get_pages(array(
'meta_key' => 'basePrice'
));
问题? nb_occurence = nb_occurence + 1,
average_amount = IF(average_amount IS NULL, VALUES(amount),
(average_amount * nb_occurence + VALUES(amount)) / (nb_occurence + 1)
),
min_amount = IF(VALUES(amount) < min_amount, VALUES(amount), min_amount),
max_amount = IF(VALUES(amount) > max_amount, VALUES(amount), max_amount)
不是现有列。
我插入的数据:我有一组非常大的数据,在A列(UNIQUE INDEX)上有很多碰撞。我将它们全部插入表中,留给MySQL计算。在这组数据中,每行都有一个amount
列。我希望MySQL使用我尝试插入的数据自行更新amount
个相对列。
我试过了:
amount
它告诉我:INSERT INTO `myTable`(`A`, `amount`) VALUES('foobar', 5)
ON DUPLICATE KEY UPDATE
nb_occurence = nb_occurence + 1,
average_amount = IF(average_amount IS NULL, VALUES(amount),
(average_amount * nb_occurence + VALUES(amount)) / (nb_occurence + 1)
),
min_amount = IF(VALUES(amount) < min_amount, VALUES(amount), min_amount),
max_amount = IF(VALUES(amount) > max_amount, VALUES(amount), max_amount)
。
我在该字段周围尝试了双引号,就像您执行裸SQLSTATE[42S22]: Column not found: 1054 Unknown column 'amount' in 'field list'
但SQL语法错误一样。
我敢打赌,有一种方法可以在SQL中正确地做到这一点!
当然我可以改变表并添加一个无用的SELECT "toto";
列,但我希望有更好的方法:)
编辑:创建表语句:
amount
答案 0 :(得分:1)
试试这个:
INSERT INTO myTable (A, average_amount) VALUES('foobar', 5)
ON DUPLICATE KEY UPDATE
nb_occurence = nb_occurence + 1,
average_amount = IF(average_amount IS NULL, VALUES(average_amount),
(average_amount * nb_occurence + VALUES(average_amount)) / (nb_occurence + 1)),
min_amount = IF(VALUES(average_amount) < min_amount, VALUES(average_amount), min_amount),
max_amount = IF(VALUES(average_amount) > max_amount, VALUES(average_amount), max_amount)
当您列出要插入的列时,问题出在第一行。您引用“amount”,表示您要插入列数量,但myTable表中不存在该列。很自然地,你会看到错误。