Perlデータ照会の技術
5323 ワード
今日、クエリーデータをテストするときに奇妙な問題を発見し、この問題について研究しました.
まずコードを見て、具体的には以下の通りです.
この場合、読み出されたデータは、ターゲットデータがテーブルごとに1回読み出されるように要求されるなど、繰り返し読み出される問題があるが、この方法は1回読み出されたように見え、実際には2回読み出された.具体的な結果は以下の通りです.
1回目の結果は2回目に含まれます.この問題を解決するために、コードをよく修正しました.容器を空にするたびに、それだけでいいことがわかりました.ここでMARKをちょっと.後で調べやすいです.
まずコードを見て、具体的には以下の通りです.
#!/usr/bin/perl
use TDmodule;
# create object
$test=TDmodule->new();
# connect db return config
$config=$test->connect_db("3d_database","localhost","root","mojige123");
# select for db return database
$old=$test->select_db($config,"select * from old_papar");
$user=$test->select_db($config,"select * from user_papar");
sub result{
local($sql)=shift;
local($task)=shift;
# print execute result
while($list=$sql->fetchrow_hashref()){
push(@target,$list->{$task});
}
return @target;
}
@old_papar=result($old,'id');
@user_papar=result($user,'number');
foreach my $a (@old_papar){
print "$a
";
}
print "--------------
";
foreach my $b (@user_papar){
print "$b
";
}
この場合、読み出されたデータは、ターゲットデータがテーブルごとに1回読み出されるように要求されるなど、繰り返し読み出される問題があるが、この方法は1回読み出されたように見え、実際には2回読み出された.具体的な結果は以下の通りです.
root@crunchbang:~# perl TDmodule.pl
1
2
3
4
5
6
7
8
9
10
11
--------------
1
2
3
4
5
6
7
8
9
10
11
145
404
693
6
168
18
746
429
206
403
319
1回目の結果は2回目に含まれます.この問題を解決するために、コードをよく修正しました.容器を空にするたびに、それだけでいいことがわかりました.ここでMARKをちょっと.後で調べやすいです.
#!/usr/bin/perl
use TDmodule;
# create object
$test=TDmodule->new();
# connect db return config
$config=$test->connect_db("3d_database","localhost","root","mojige123");
# select for db return database
$old=$test->select_db($config,"select * from old_papar");
$user=$test->select_db($config,"select * from user_papar");
sub result{
local($sql)=shift;
local($task)=shift;
# clean list array
@target=();
# print execute result
while($list=$sql->fetchrow_hashref()){
push(@target,$list->{$task});
}
return @target;
}
@old_papar=result($old,'id');
@user_papar=result($user,'number');
foreach my $a (@old_papar){
print "$a
";
}
print "--------------
";
foreach my $b (@user_papar){
print "$b
";
}