SQL php连接三个表

时间:2013-08-12 10:28:40

标签: php sql

我是一个初学者程序员,我想问一些关于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 ;

3 个答案:

答案 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表中的“语言”中选择他们的“技能级别”

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