使用Perl将多个逗号分隔值添加到MySQL行

时间:2015-10-05 00:47:01

标签: mysql perl

我有这段代码:

product_id   product_id
9999            22
8888            21
9999            66
7777            77
9999            88

目前,数据如下所示:

product_id   product_id
9999            22,66,88
8888            21
7777            77

我想存储这样的数据:

JOIN

我一直在阅读有关使用$HI的内容,但似乎无法弄清楚如何做到这一点。我继承了这段代码,并没有使用预处理语句和占位符。 一旦我掌握了Perl,我希望能够解决这个问题。

1 个答案:

答案 0 :(得分:0)

我会警告perl中的'data munging',当你有一个数据库时 - 几乎不变,最好这样做'数据库端' - 毕竟,这就是 的数据库>。

但要回答你的一般问题 - 你需要的是哈希:

#!/usr/bin/env perl 
use strict;
use warnings;

#our hash
my %combined;

#header row - grabs first line and prints it. 
print scalar <DATA>; 

#iterates line by line
while ( <DATA> ) {
   #removes linefeeds
   chomp;
   #splits on whitespace. 
   my ($key, $value ) = split;
   #stores in combined hash of arrays.  
   push ( @{$combined{$key}}, $value ); 
}

#cycle through our hash, extracting each key and 
#merge the array into a string, comma delimited. 
foreach my $prod ( sort keys %combined ) { 
    print join ("\t", $prod, join ( ",", @{$combined{$prod}} ) ),"\n";
}


__DATA__
product_id   product_id
9999            22
8888            21
9999            66
7777            77
9999            88

鉴于您的数据库查询正在返回hashref,那么您不需要如上所述的“拆分”部分 - 因为您已经有效地完成了它。此代码旨在说明该技术(尤其是因为我没有您的数据库,所以这样我们得到了一个可运行的示例)。