我是一个初学者程序员,我想问一些关于SQL和PHP的东西。所以,我在数据库中有3个表,第一个是表't1'存储有关用户的信息
(id--> primary key,username, password , email),
第二个是技能't2'
( id--> primary key, skills,level)
,第三个是关于用户的更具体的细节
(id--> primary key, years, language).
我想要的是存储在t1中已存在的特定用户中的表t2和t3。我怎样才能做到这一点?
我尝试通过addind将每个id连接到另一个表这三个表,例如t2表包含t1的id作为列,t3表包含t1的id和id t2。
我的问题是,当我在t3中插入数据时,可以使用t1.id和t2.id来显示表中三个表的所有信息。
CREATE TABLE IF NOT EXISTS `t3` (
`degree` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`exp_years` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`department` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`t3_id` int(25) NOT NULL AUTO_INCREMENT,
`t1_id` int(11) NOT NULL,
`t2_id` int(11) NOT NULL,
PRIMARY KEY (`t3_id`),
UNIQUE KEY `id` (`t3_id`),
KEY `t1id` (`t1_id`),
KEY `t2_d` (`t2_id`),
KEY `t2_id` (`t2_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ;
CREATE TABLE IF NOT EXISTS `t2` (
`fullname` varchar(35) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`webpage` varchar(150) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`rating` varchar(30) NOT NULL,
`t2_id` int(11) NOT NULL AUTO_INCREMENT,
`t1_id` int(11) NOT NULL,
PRIMARY KEY (`t2_id`),
KEY `t1_id` (`t1_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=147 ;
CREATE TABLE IF NOT EXISTS `t1` (
`t1_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`password` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`cpassword` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`email` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`role` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`t1_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ;
答案 0 :(得分:0)
在表t2和t3中添加一列userId
,并在t2或t3中添加内容时指定存储在t1中的用户的ID。
之后,您可以使用SQL连接获取有关用户的所有信息:http://www.w3schools.com/sql/sql_join.asp
答案 1 :(得分:0)
您还需要一个表格来将用户与技能,年份和语言联系起来:
t4 - > t4primarykey,t1foreignkey,t2foreignkey,t3foreignkey
或者可能更好:
t4 - > t4primarykey,t1foreignkey,t2foreignkey t5 - > t5primarykey,t1foreignkey,t3foreignkey
从一开始就设计表格非常重要,因此可以通过这种方式进行链接。 Antoine的答案也将起作用,但会导致更大数据结构中的数据重复。 在理想的世界中,您的表中都不会包含其他表中保存的数据。在数据库设计中查找“普通表单”,您的SQL生活最终将变得更加容易。
答案 2 :(得分:0)
您的表之间没有关系,因此目前您无法根据特定用户从t2或t3中选择任何内容。 您可以在表t2和t3中添加“username”,然后每个表数据都基于每个用户名。 例如,您可以根据他们的用户名(因为用户名将在每个表中)从t2表和t3表中的“语言”中选择他们的“技能级别”
这是一个基本的建议,你应该阅读表关系和外键。