LOAD DATA INFILE - 在Count上设置值

时间:2013-07-11 16:42:31

标签: php mysql sql database

用户可以上传CSV并按列进行定义 因此,CSV没有静态定义,但更像是每个用户都可以按照自己的意愿定义CSV。 用户还购买了一个帐户,该帐户仅限于可以“激活”的多种产品 示例清楚:
用户拥有一个帐户,允许他激活1000个产品 但在他上传的CSV中,他将1100件产品设置为活跃的 我们使用LOAD DATA INFILE查询将此CSV加载到我们的MYSQL-DB中。

为了避免用户可以通过CSV激活更多产品的这种行为,他的帐户甚至被限制为 - 是否有任何可能的解决方案,例如:

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

1 个答案:

答案 0 :(得分:0)

好的,我解决了它并提出了以下解决方案 - 受eggyal评论的启发 我知道这个问题非常具有个性,但如果你抽象它(因为我会尝试抽象我的答案),它可能对LOAD DATA INFILE Querys的其他或类似问题有所帮助。
1)将CSV值加载到临时表中。
在某些情况下,这足以修改多个值 在我的问题中,并不是因为重要的是,在决赛桌上的所有内容之后,有多少产品将处于活跃状态 活动值可以更改,最终表中活动的产品将被CSV设置为非活动状态,因此在将孔CSV加载到最终表格后,您无法确定活动产品的最终总和。所以转到第2步。(如果你已经在步骤1中修改了你的值)
2)将加载到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)现在切断超出限制的东西
我是通过UPDATE执行此操作的 - 使用LIMIT - Param进行查询 4)删除table_final

中的行

最终想法
我发现的一个问题是,您不能将值降低到用户CSV的顺序。 如果我不想通过设置这些最后在CSV中的产品的“有效”值开始,我有点迷失,因为我无法收回此订单。 如果您知道恢复此订单的方法,或者您想出一个更好的解决方案 - 请告诉我们;)