Php 无法关联两个MySQL表(外键)
这是我的Php 无法关联两个MySQL表(外键),php,mysql,Php,Mysql,这是我的USER表 CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `expiry` varchar(6) NOT NULL, `contact_id` int(11) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(100) NOT
USER
表
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`expiry` varchar(6) NOT NULL,
`contact_id` int(11) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(100) NOT NULL,
`level` int(3) NOT NULL,
`active` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
如果不存在“用户”,则创建表(
`id`int(11)非空自动增量,
`用户名`varchar(100)不为空,
`expiration`varchar(6)不为空,
`联系人id`int(11)不为空,
`电子邮件'varchar(255)不为空,
`密码'varchar(100)不为空,
`级别'int(3)不为空,
`活动'tinyint(4)不为空默认值'1',
主键(`id`、`email`)
)ENGINE=InnoDB默认字符集=latin1自动增量=1;
这是我的联系方式表
CREATE TABLE IF NOT EXISTS `contact_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email_address` varchar(255) NOT NULL,
`company_name` varchar(255) NOT NULL,
`license_number` varchar(255) NOT NULL,
`phone` varchar(30) NOT NULL,
`fax` varchar(30) NOT NULL,
`mobile` varchar(30) NOT NULL,
`category` varchar(100) NOT NULL,
`country` varchar(20) NOT NULL,
`state` varchar(20) NOT NULL,
`city` varchar(100) NOT NULL,
`postcode` varchar(50) NOT NULL,
PRIMARY KEY (`id`,`email_address`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
如果不存在“联系人信息”,则创建表(
`id`int(11)非空自动增量,
`name`varchar(255)不为空,
`电子邮件地址'varchar(255)不为空,
`公司名称'varchar(255)不为空,
`许可证编号'varchar(255)不为空,
`电话'varchar(30)不为空,
`传真'varchar(30)不为空,
`mobile`varchar(30)不为空,
`类别'varchar(100)不为空,
`country`varchar(20)不为空,
`state`varchar(20)不为空,
`city`varchar(100)不为空,
`邮政编码'varchar(50)不为空,
主键(`id`、`email\u address`),
)ENGINE=InnoDB默认字符集=latin1自动增量=1;
系统使用用户名登录用户。我想修改它的方式,它使用电子邮件登录。但用户表中没有电子邮件地址
我在用户表中添加了外键-电子邮件(这是联系人信息中的电子邮件地址)
我该如何查询数据库?不,不,不,不,不。说真的,不。别逼我过去:-) 您将电子邮件地址存储两次,这打破了第三种正常形式 这种关系只需要很短,即
id
。假设您不保证两个表中的id相同(即,我的users.id
不一定等于我的contact\u info.id
),只需在users
表中添加一个ci\u id
,作为contact\u info
表的外键即可
然后,获取用户的用户名
和电子邮件
的查询如下:
select u.username, ci.email
from users u, contact_info ci
where u.username = 'paxdiablo'
and u.ci_id = ci.id;
您真的希望每个用户有两个电子邮件地址吗?或者这是两个表之间的一对多关系?使用ANSI默认值的相同SQL查询:选择u.username,ci.email from users internal join contact\u inf ci on cid.id=u.cid\u id,其中u.username='someone';这两种方法工作得很好,但是当有许多表联接时,更容易知道搜索条件和表联接在哪里。