加载数据INFILE - 设置计数值

问题描述:

用户可以上传CSV并按其列定义它们。
所以CSV没有statick定义,但更像每个用户可以定义他们想要的CSV。 用户还购买了一个仅限于许多可“激活”的产品的帐户。
举例说明:
用户有一个帐户,允许他激活1000个产品。
但是在他上传的CSV文件中,他设置了1100个产品来激活。
我们使用LOAD DATA INFILE查询将此CSV加载到我们的MYSQL-DB中。加载数据INFILE - 设置计数值

为了避免这种情况,用户可以激活更多的产品通过CSV那么他的账号甚至限制为 - 是否有任何可能的解决方案就是说,如:

active = IF(@active = 1 AND COUNTER <= 1000, (1 AND COUNTER++), 0) 
+1

上传到临时表中,然后只插入所需的记录(例如,通过应用“LIMIT '条款)进入决赛桌。 – eggyal

+0

当然是我的上帝哦。我们甚至会在将生产表格转换为TMP表格之前将CSV格式推向市场。上帝如此清楚。非常感谢 ;) –

好吧,我解决了它UND想出了采用以下解决方案 - 受到eggyal评论的启发。
我知道这个问题是非常个人化的,但是如果你抽象它(因为我会尝试抽象我的答案),它可能会对LOAD DATA INFILE Querys的其他或类似问题有帮助。
1)将CSV值加载到临时表中。
在某些情况下,这将足以修改多个值。
在我的问题中,这并不是因为它很重要,在决赛桌上的所有东西之后有多少产品会被激活。
活动值可能会更改,在决赛桌中活动的产品将被设置为不活动的CSV,因此在将洞CSV加载到决赛桌后,您无法确定活动产品的最终总和。因此,移动到第2步。

2(此外,如果你媒体链接在步骤1中修改的值))按装入table_tmp的CSV值到您的table_final
该查询例如可以帮助你:

UPDATE 
table_final, table_tmp 
SET 
table_final.value1 = table_tmp.value1, 
table_final.value2 = table_tmp.value2 
WHERE 
table_final.some_key = table_tmp.some_key 

3)现在切的东西,这是超过限度
我有LIMIT -param做这个由UPDATE -Query。
一个问题,我发现,你不能把值,以便推给用户的CSV的顺序:
4)table_final

最后的思考删除行。 如果我不想通过设置这些CSV中最后一个产品的“有效”价值,我有点失落,因为我无法取回这个订单。 如果您知道恢复该订单的方法,或者您想出了更好的解决方案,请告诉我们;)