比方说,我有一个购物车的食品杂货,每个项目都有一个唯一的ID。当有人点击“购买”时,会发送一个数组,其中包含购物车中每件商品的对象。购物车各不相同,所以有时可能是2个项目,有时是6个项目,等等。
例子:
[{id: 1, amt_purchased: 3}, {id: 2, amt_purchased: 4}]
我需要我的SQL表“可用的杂货”来根据购买的商品进行更新。
对于一个杂货项目,我会使用以下内容:
UPDATE available
SET amt_avail = amt_avail - 3
WHERE produce_id = 1
既然我现在有多件商品,我如何让查询为购买的每件商品运行?或者作为一个大规模的查询,根据购买的商品数量进行调整?
我的项目是Ionic/AngularJs和NodeJs、Express、MassiveJs。
谢谢你们!仍然是一个菜鸟,所以我很难解释我需要什么。
如果您使用的是Massive.js 3.0,这意味着您可以访问其底层驱动程序pgpromise。
不幸的是,我没有亲自使用Massive.js,所以我对直接通过它进行更新了解不够。我只能建议您作为pgpromise的作者,您可以访问其驱动程序来进行您想要的更新,如下所示。
const db; // your Massive.js database object;
const helpers = db.pgp.helpers; // pg-promise helpers namespace
// reusable ColumnSet:
const cs = new helpers.ColumnSet(['?id', 'amt_purchased'], {table: 'available '});
// your input data:
const data = [{id: 1, amt_purchased: 3}, {id: 2, amt_purchased: 4}];
// query to be executed:
const query = helpers.update(data, cs) + ' WHERE v.id = t.id';
db.instance.none(query)
.then(() => {
// success, updated all at once
})
.catch(error => {
// error
});
另请参阅:pg promise multi-row update。
链接:
update available
set amt_avail = case
when produce_id = 1 then amt_avail - 3
when produce_id = 2 then amt_avail - 4
end;
您可以使用simple for循环来构建这样的查询
var items = [{id: 1, amt_purchased: 3}, {id: 2, amt_purchased: 4}];
function buildQuery(items) {
var query = "update available set amt_avail = case ";
for (var i = 0; i < items.length; i++) {
var item = items[i];
query += `when produce_id = ${item['id']} then amt_avail - ${item['amt_purchased']}`
}
return query += " end;";
}
PostgreSQL有一个优秀的特性< code >更新...从...;提供了一种在另一个表上更新一个表的简便方法。第二个出色的特性是,您可以在这个查询中使用伪表< code>VALUES:
UPDATE available a
SET amt_available = a.amt_available + v.amt_available
FROM (
VALUES (1, 25), (3, 15), (7, -55) -- just pass required values
) AS v (produce_id, amt_available)
WHERE a.produce_id=v.produce_id;
这是一个SQL文件来检查一个想法 - http://sqlfiddle.com/#!17/04f24/22
问题内容: 我有一系列对象,并且正在使用对其进行迭代,这很容易。该数组如下所示: 我的属性如下所示: 在每个迭代中,等于预期的对象之一。无论如何都可以访问键和对象的值?这样我就可以做这样的事情: 其中== 和== 。我已经尝试做这件事,但总是最终只是step对象的索引(这很有意义)。我只是想弄清楚是否还有另一种语法编写方式,以便我可以获取键和值。 感谢您的任何想法/建议。非常感激。 PS。我目前的
我发现自己经常遇到这种模式。我有一个从api中返回的对象数组,我只需要操作所有对象中的一个属性。 有没有办法使用ES6/Babel或Typescript让该模式更具声明性? 寻找一些巧妙的破坏技巧或类似的东西。
我有一个从列表中选择项目的代码,我有一个扫描器来扫描文件(每行有电影,然后是演员),并将电影添加到数组中。我该怎么做才能让它添加到arraylist中的每一部电影都能在线存储紧随其后的演员?例如:每行有一行是电影名(日期)/LastName、FirstName/Lastname2、Firstname2/等等。我的代码包含一个类电影,它将电影名称转换为字符串。我怎么能在任何给定点搜索任何电影,并让它
Example Module # example.py # This comment appears first # and spans 2 lines. # This comment does not show up in the output of getcomments(). """Sample file to serve as the basis for inspect example
问题内容: 我的JSON数据如下所示: 给定文本“ foo”,我想返回所有具有此子字符串的元组。但是我不知道如何编写相同的查询。 我遵循了这个相关的答案,但不知道该怎么做。 这是我现在正在工作的内容: 我不想传递整个文本,而是传递并获得与该文本匹配的结果。 问题答案: 您的解决方案可以进一步简化: 或更简单一点,因为在此示例中,您实际上根本不需要行类型(): dbfiddle 在这里 但这 不是
我的数组正在加载,并且正在按计划(按照它们在文件中出现的顺序)将卡打印出来。当我尝试在单独的方法中循环遍历arraylist以检查数据是否存在时,它只打印最后一个对象而不是每个对象。有人能告诉我为什么吗? 加载法 和getAll()方法 运行时,它只打印出.txt文件中的最后一张牌“KS”(黑桃之王)。有人能告诉我为什么会这样吗? 谢谢 }