检查enq1,enq2的type1id的程序

返回

# check_type1id.pl # 程序目的:检查一个type1id下是否有两个以上相同的type use strict; use DBI; my(%t,$n,@fld,$pref,@rec,%seen,@uniq,@org,$item); # 连接数据库 $$pref{dsn} = "DBI:mysql:host=localhost;database=cookbook"; $$pref{dbh} = DBI->connect($$pref{dsn}, "cbuser", "cbpass") or die "Cannot connect to server\n"; $$pref{dbh}->do("SET NAMES utf8"); if(!$$pref{dbh}){ print "SQL read ERROR!\n"; exit; } print "Please input table name(enq1,enq2)="; chop($t{table1} = <STDIN>); # 取出enq1 or enq2的数据 $t{sth} = $$pref{dbh}->prepare("SELECT id,type1id FROM $t{table1}"); $t{sth}->execute; while ( @rec = $t{sth}->fetchrow_array ) { push(@{ $t{id_list} },$rec[0]); push(@{ $t{type1id_list} },$rec[1]); } $t{sth}->finish; # 关闭数据库 $$pref{dbh}->disconnect; print "Table name ==> $t{table1}\n"; print " id==> org==>uniq\n"; for $n ( 0 .. $#{ $t{id_list} } ) { $t{id1} = $t{id_list}[$n]; $t{type1id1} = $t{type1id_list}[$n]; next unless $t{type1id1} =~ /==/; @org = split(/==/,$t{type1id1}); # 检查一个配列中是否有相同的项目 %seen = (); @uniq = (); foreach $item (@org) { push(@uniq,$item) unless $seen{$item}++; } if ( $#org != $#uniq ) { printf ("%04d==>%04d==>%04d\n",$t{id1},$#org,$#uniq); } }
返回