在 MySQL 中使用关系
Using relations in MySQL
假设我有以下 tables:
Elements:
(int) ID
(int) Name_id
Names:
(int) ID
(varchar) Name
Elements.Name_id
与Names.id
有内在联系。用户以 html 形式输入元素名称。然后 php 脚本将元素名称插入元素 table。我的问题来了:
是否可以在插入查询中指定元素名称而不是元素 name_id
?如果没有,我将不得不:
SELECT `ID` FROM `Names` WHERE `Names`.`Name` LIKE "$php_variable";
...
INSERT INTO `Elements` SET `Name` = "$php_variable";
当然,第二个 $php_variable 是前一个查询的结果。
你可以这样做:
insert into elements(name)
select n.name
from names n
where n.id = $php_variable;
话虽如此,不要采用这种方法。你的数据结构是错误的。在大多数情况下,您想要连接到 names.id
,而不是 names.name
。 (有一些例外情况,复制名称可能是缓慢变化维度的一种解决方案,但我怀疑这是您的用例。)
所以,修复数据结构。创建 table 语句如下所示:
create table names (
name_id int auto_increment primary key,
name varchar(255) unique
);
create table elements (
element_id int auto_increment primary key,
name_id int,
foreign key (name_id) references names(name_id)
);
然后在需要时使用显式 JOIN
获取名称。
注意:我将 table 的 ID 更改为 "tablename_Id"。这不是必需的,但我发现外键和主键具有相同的名称很有帮助。
假设我有以下 tables:
Elements:
(int) ID
(int) Name_id
Names:
(int) ID
(varchar) Name
Elements.Name_id
与Names.id
有内在联系。用户以 html 形式输入元素名称。然后 php 脚本将元素名称插入元素 table。我的问题来了:
是否可以在插入查询中指定元素名称而不是元素 name_id
?如果没有,我将不得不:
SELECT `ID` FROM `Names` WHERE `Names`.`Name` LIKE "$php_variable";
...
INSERT INTO `Elements` SET `Name` = "$php_variable";
当然,第二个 $php_variable 是前一个查询的结果。
你可以这样做:
insert into elements(name)
select n.name
from names n
where n.id = $php_variable;
话虽如此,不要采用这种方法。你的数据结构是错误的。在大多数情况下,您想要连接到 names.id
,而不是 names.name
。 (有一些例外情况,复制名称可能是缓慢变化维度的一种解决方案,但我怀疑这是您的用例。)
所以,修复数据结构。创建 table 语句如下所示:
create table names (
name_id int auto_increment primary key,
name varchar(255) unique
);
create table elements (
element_id int auto_increment primary key,
name_id int,
foreign key (name_id) references names(name_id)
);
然后在需要时使用显式 JOIN
获取名称。
注意:我将 table 的 ID 更改为 "tablename_Id"。这不是必需的,但我发现外键和主键具有相同的名称很有帮助。