1
我想通過Perl查詢MySQL數據庫。我的數據庫有一個表,其主鍵是 由三列PK1,PK2和PK3組成。我有數組arr1和arr2分別包含PK1和PK2的一些值 。我想在每個 arr1和arr2的可能組合中找到數據庫中相應的PK3值(可能有一些組合中沒有PK3的值 )。例如:使用Perl查找複合主鍵的一部分
PK1 PK2 PK3
"JIM" "RED" 1
"JOHN" "BLUE" 2
"ANN" "GREEN" 3
"ANN" "WHITE" 4
"ME" "BLACK" 5
"ME" "RED" 6
arr1 = ("JIM", "ME", "ANN")
arr2 = ("BLACK", "RED")
我應該得到的結果是:
arr3 = (1, 5, 6)
我可以拿出最好的解決辦法是:
foreach my $el1 (@arr1) {
$i = 0;
$query = "SELECT PK3 FROM table WHERE PK1 = $el1 AND PK2 = ?;";
foreach my $el2 (@arr2) {
my $query_handle = $connxn->prepare($query);
$query_handle->execute($el2);
$query_handle->bind_columns(undef, \$rec);
while($query_handle->fetch()) {
push(@arr3, $rec);
}
}
}
但是,這將無法工作,因爲會有$ el1和$ el2的組合,其中 沒有任何約束。有沒有更好/更快的方式來做到這一點?它的一個大表和數組是 也很長,所以即使它沒有給我一個錯誤,我的程序也需要時間。我在這裏沒有想法, 所以任何幫助將不勝感激。謝謝!
謝謝...但我怎麼會寫這'@ arr1'和'@ arr2'方面? – user828647
@ user828647:我的Perl有點生疏,但我認爲上面修改後的答案應該可以做到。 – eggyal
謝謝!有用!但是,你能否向我解釋一下你在'join'中使用的synatax? '('?')x @ arr1'是什麼意思? – user828647