DBI
モジュールとを使用して、Perlでこれら2つの挿入クエリを実行しますDBD:mysql
。
これは、フィールド、、、url
をテーブルに挿入します。html_extr_text
concord_file
sys_time
article
my @fields = (qw(url html_extr_text concord_file sys_time));
my $fieldlist = join ", ", @fields;
my $field_placeholders = join ", ", map {'?'} @fields;
my $insert_query = qq{
INSERT INTO article ($fieldlist)
VALUES ($field_placeholders)
};
my $sth = $dbh->prepare($insert_query);
my $id_article;
my @id_articles;
foreach my $article_index (0 .. @output_concord_files_prepare) {
$field_placeholders = $sth->execute(
$url_prepare[$article_index],
$html_pages_files_extended[$article_index],
$output_concord_files_prepare[$article_index],
$sys_time_prepare[$article_index]);
$id_article = $dbh->last_insert_id(undef, undef, 'article', 'id_article');
push @id_articles, $id_article;
if ($field_placeholders != 1) {
die "Error inserting records, only [$field_placeholders] got inserted: " . $sth->insert->errstr;
}
}
print "@id_articles\n";
そしてこれevent
はテーブルにフィールドを挿入しますevent
:
@fields = (qw(event));
$fieldlist = join ", ", @fields;
$field_placeholders = join ", ", map {'?'} @fields;
$insert_query = qq{
INSERT INTO event ($fieldlist)
VALUES ($field_placeholders)
};
$sth = $dbh->prepare($insert_query);
my $id_event;
my @id_events;
foreach my $event_index (0 .. @event_prepare){
$field_placeholders = $sth->execute($event_prepare[$event_index]);
$id_event = $dbh->last_insert_id(undef, undef, 'event', 'id_event');
push @id_events, $id_event;
if ($field_placeholders != 1){
die "Error inserting records, only [$field_placeholders] got inserted: " . $sth->insert->errstr;
}
}
print "@id_events\n";
3番目の1対多の関係テーブルを作成したいと思います。1つの記事に複数のイベントが含まれているため、次のファイルがあります。
output_concord/concord.0.txt -> earthquake
output_concord/concord.0.txt -> avalanche
output_concord/concord.0.txt -> snowfall
output_concord/concord.1.txt -> avalanche
output_concord/concord.1.txt -> rock fall
output_concord/concord.1.txt -> mud slide
output_concord/concord.4.txt -> avalanche
output_concord/concord.4.txt -> rochfall
output_concord/concord.4.txt -> topple
...
ご覧のとおり、を使用して各エントリのIDを収集しLAST_INSERT_ID
ます。しかし、私は次のステップをどのように行うかを本当に知りません。
このファイルを使用して、3番目のテーブル'article_event_index'に前の2つのテーブルのIDを挿入するにはどうすればよいですか。
これは次のようになります。
$create_query = qq{
create table article_event_index(
id_article int(10) NOT NULL,
id_event int(10) NOT NULL,
primary key (id_article, id_event),
foreign key (id_article) references article (id_article),
foreign key (id_event) references event (id_event)
)
};
$dbh->do($create_query);
パターンに従った関係が含まれます
1-1, 1-2, 1-3, 2-4, 3-5 ...
私はPerlとデータベースの初心者なので、やりたいことを定式化するのは難しいです。私は十分に明確だったと思います。