我正在尝试使用连接的外键创建自动表创建,以便可以在同一表中显示数据。创建表时,应该如何在表之间建立连接。
注意:这些表是同时创建的。首先按Palle_tbs
进行加载。
我不知道在本例中是否可以使用Alter Table,因为这些表是同时创建的。如果是这样,我该怎么办?
我试图像这样引用另一个表。
addcsv.php
这就是我调用方法的地方。
$lastest_filename
没有使用atm。
$csv->createPalleTable($latest_filename);
$csv->insertPalleTable($latest_filename, array_map("toNumber", fgetcsv($openfile, 1000, ";")));
$csv->createHoejde1($latest_filename);
$csv->insertHoejde1Table($latest_filename, array_map("toNumber", fgetcsv($openfile, 1000, ";")));
我可以添加更多代码,只是认为这会使它更加混乱。
Csv.php
这是我制作表格和插入内容的地方。
编辑我已经更新了我的尝试
我希望这些表可以连接。我得到的结果是FK_palle = 0
public function createHoejde1($latest_filename){
return $this->db->toList("CREATE TABLE IF NOT EXISTS `csvHoejde1`(
id INT(11) AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(50),
Datum VARCHAR(50),
Property VARCHAR(50),
Criterion VARCHAR(50),
Type VARCHAR(50),
Nominal DECIMAL(10,2),
Actual DECIMAL(10,2),
Tolminus DECIMAL(10,2),
Tolplus DECIMAL(10,2),
Dev DECIMAL(10,2),
FK_palle INT(11) REFERENCES Palle_tbs(`id`))
");}
public function insertHoejde1Table($latest_filename ,$getdata){
return $this->db->toList("INSERT INTO `csvHoejde1` (`Name`, `Datum`, `Property`, `Criterion`, `Type`, `Nominal`, `Actual`,`Tolminus`,`Tolplus`,`Dev`)
VALUES (:Name, :Datum, :Property, :Criterion, :Type, :Nominal, :Actual, :Tolminus, :Tolplus, :Dev)",
[
':Name' => $getdata[0],
':Datum'=> $getdata[1],
':Property'=> $getdata[2],
':Criterion'=> $getdata[3],
':Type'=> $getdata[4],
':Nominal'=> $getdata[5],
':Actual'=> $getdata[6],
':Tolminus'=> $getdata[7],
':Tolplus'=> $getdata[8],
':Dev'=> $getdata[9]
]
);}
public function createPalleTable($latest_filename){
return $this->db->toList("CREATE TABLE IF NOT EXISTS `Palle_tbs`(
id INT(11) AUTO_INCREMENT PRIMARY KEY,
Palle_nr VARCHAR(50),
Varenummer VARCHAR(50),
Ordre_nummer VARCHAR(50),
Operatoer VARCHAR(50),
Maskine_nr VARCHAR(50),
Raavare_batch_nr VARCHAR(50),
Dato_ur_stillet VARCHAR(50),
Klokke_fuldsvejst VARCHAR(50),
Fuldstoebning_af_klokke VARCHAR(50),
Afgratning_af_overflade VARCHAR(50),
Vaegt DECIMAL(10,2))
");}
public function insertPalleTable($latest_filename ,$palledata){
return $this->db->toList("INSERT INTO `Palle_tbs` (`Palle_nr`, `Varenummer`, `Ordre_nummer`, `Operatoer`, `Maskine_nr`,
`Raavare_batch_nr`, `Dato_ur_stillet`,`Klokke_fuldsvejst`,`Fuldstoebning_af_klokke`,`Afgratning_af_overflade`,`Vaegt`)
VALUES (:Palle_nr, :Varenummer, :Ordre_nummer, :Operatoer, :Maskine_nr, :Raavare_batch_nr, :Dato_ur_stillet,
:Klokke_fuldsvejst, :Fuldstoebning_af_klokke, :Afgratning_af_overflade, :Vaegt)",
[
':Palle_nr' => $palledata[0],
':Varenummer'=> $palledata[1],
':Ordre_nummer'=> $palledata[2],
':Operatoer'=> $palledata[3],
':Maskine_nr'=> $palledata[4],
':Raavare_batch_nr'=> $palledata[5],
':Dato_ur_stillet'=> $palledata[6],
':Klokke_fuldsvejst'=> $palledata[7],
':Fuldstoebning_af_klokke'=> $palledata[8],
':Afgratning_af_overflade'=> $palledata[9],
':Vaegt'=> $palledata[10]
]
);}
结果为FK_palle为0
答案 0 :(得分:1)
如果要将table1
引用到table2
中,则需要首先创建table1
在声明中,您写了FOREIGN KEY (FK_product) REFERENCES product_tb(product_id)
。 product_id
表中没有product_tb
字段,您打算引用主键id
然后,您可以使用FOREIGN KEY
约束。
例如:
CREATE TABLE table1
( -- ^----^-----------------------------------+
id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |
-- ^^---------------------------------------------------+
someData VARCHAR(255) -- | |
); -- | |
-- | |
CREATE TABLE table2 -- | |
( -- | |
id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- | |
otherData VARCHAR(255), -- | |
table1_id INT(6), -- +--------------+ |
-- ^-------^-------+ | +----------+
-- | | |
-- v-------v v----v vv
FOREIGN KEY table1_id REFERENCES table1 (id)
);
然后,您可以使用INSERT
查询来填充表格。对于table2,您必须插入外键,它不会自动完成(您的数据库不知道所引用的行)
例如:
INSERT INTO table1
-- id
-- | someData
-- | |
-- v-----v v---v
VALUES (DEFAULT, "foo"),
(DEFAULT, "bar");
INSERT INTO table2
-- id
-- | otherData
-- | | table1_id
-- | | |
-- v-----v v------v v
VALUES (DEFAULT, "blabla", 1),
(DEFAULT, "bob the sponge", 1),
(DEFAULT, "John Smith", 1),
(DEFAULT, "forty two", 2),
(DEFAULT, "Hello world", 2);