我想打一個關係表用Perl這兩個表之間並在其中插入數據:用Perl DBI模塊關係表
$create_query = qq{
create table article(
id_article int(10) auto_increment NOT NULL,
url MEDIUMTEXT COLLATE utf8_general_ci,
html_extr_text TEXT COLLATE utf8_general_ci,
concord_file TEXT COLLATE utf8_general_ci,
sys_time VARCHAR(50),
primary key (id_article)
)
};
$dbh->do($create_query);
$create_query = qq{
create table event(
id_event int(10) auto_increment NOT NULL,
event MEDIUMTEXT COLLATE utf8_general_ci,
primary key (id_event)
)
};
$dbh->do($create_query);
現在的關係表如下:
$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);
有人知道爲了填充'article_event_index'表應該是什麼perl語句? 因爲我使用數組爲它看起來像這樣每個表中的其他表:
my $i_event;
my $id_event = 0;
my @event_index;
for ($i_event = 0; $i_event < @event_prepare; $i_event++){
$dbh->do("
INSERT INTO `event`(`id_event`, `event`)
VALUES ('$id_event', '$event_prepare[$i_event]')
") || die $dbh->errstr;
push @event_index, $i_event;
}
$id_event++;
在這種情況下,「id_event」是由$ id_event的增量產生。如果我想在索引表中重用此ID,這是一個很好的做法嗎?
是的,whit'last_insert_id'方法我得到了id的列表。但是,如何在「文章」和「事件」之間建立一對多的關係?因爲一篇文章可能有多個事件。所以它會是:1 - 1,1 - 2,2 - 3,2 - 4,2 - 5 ...等等。第一個數字是文章,第二個是事件。再次感謝 – user2007958 2013-03-13 09:30:57
一對多關係在這裏由你如何填充表格來定義。如果在你的映射表上,你插入相同的偶數id,幾個文章ID(這是你的映射表定義允許的),你有一個一對多的關係。我覺得你正在尋找一種'神奇'的方式來創建一對多的關係,而無需處理idx和交叉表。你應該看看'DBIx :: Class',它可以讓你這樣做(但是比API更復雜的API)。 – Mattan 2013-03-13 09:37:30