0

我是一个初学者程序员,我想问一些关于 SQL 和 PHP 的问题。所以,我在数据库中有 3 个表,第一个是存储用户信息的表 't1'

(id--> primary key,username, password , email), 

第二个是关于技能't2'

( id--> primary key, skills,level)

第三个是关于用户更具体的细节

(id--> primary key, years, language). 

我想要的是存储在 t1 中已经存在的特定用户中的表 t2 和 t3。我怎样才能做到这一点?

我尝试通过将每个 id 添加到另一个表来连接三个表,例如 t2 表包含 t1 的 id 作为列,而 t3 表包含 t1 的 id 和 t2 的 id。

我的问题是,当我在 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 ;
4

3 回答 3

0

userId在表 t2 和 t3 中添加一列,并在 t2 或 t3 中添加内容时指定存储在 t1 中的用户 ID。

之后,您可以使用 SQL 连接获取有关用户的所有信息:http: //www.w3schools.com/sql/sql_join.asp

于 2013-08-12T10:34:02.380 回答
0

您还需要一张表来将用户与技能、年限和语言联系起来:

t4 -> t4 主键,t1 外键,t2 外键,t3 外键

或者可能更好:

t4 -> t4primarykey,t1foreignkey,t2foreignkey t5 -> t5primarykey,t1foreignkey,t3foreignkey

从一开始就设计您的表格很重要,因此它们可以以这种方式链接。Antoine 的回答也可以,但会导致更大数据结构中的数据重复。在理想情况下,您的任何表都不会包含其他表中保存的数据。在数据库设计中查找“标准形式”,您的 sql 生活最终将变得更加轻松。

于 2013-08-12T10:36:36.590 回答
0

您的表之间没有任何关系,因此目前您无法根据特定用户从 t2 或 t3 中选择任何内容。您可以将“用户名”添加到表 t2 和 t3,然后每个表数据都基于每个用户名。因此,例如,您可以根据他们的用户名从 t2 表中选择他们的“技能级别”和从 t3 表中选择“语言”(因为用户名将在每个表中)

这是一个基本建议,您应该阅读表关系和外键。

于 2013-08-12T11:02:06.993 回答