这是我的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 ;
这是我的contact_info表
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 ;
系统使用用户名登录用户.我想以一种使用电子邮件登录的方式对其进行修改.但是users表中没有email_address.
我在用户表中添加了外键 – 电子邮件(在contact_info中是email_address).
我该如何查询数据库?
解决方法:
不,不,不,不.说真的,没有.不要让我过来那里:-)
您通过存储两次电子邮件地址来破坏第三范式.
这种关系只需要一个短的,即id的关系.假设您不保证两个表中的ID相同(即,我的users.id不一定等于我的contact_info.id),只需将ci_id添加到users表以充当外键的contact_info表.
然后获取用户的用户名和电子邮件的查询将是这样的:
select u.username, ci.email
from users u, contact_info ci
where u.username = 'paxdiablo'
and u.ci_id = ci.id;
标签:php,mysql
来源: https://codeday.me/bug/20190715/1472489.html