gpt4 book ai didi

php - 如何在创建表时创建外键

转载 作者:行者123 更新时间:2023-11-29 09:51:15 24 4
gpt4 key购买 nike

我正在尝试创建一个连接外键的自动表创建,以便我可以在同一个表中显示数据。创建表时我应该如何在表之间建立连接。

注意:表是同时创建的。 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

最佳答案

如果要将table1引用到table2中,则需要先创建table1

在您的声明中,您编写了FOREIGN KEY (FK_product) REFERENCES Product_tb(product_id)product_tb 表中没有 product_id 字段,您的意思是引用主键 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);

关于php - 如何在创建表时创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54762550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com