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 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),只需添加users 表的 ci_id 作为 contact_info 表的外键。

然后获取用户的 usernameemail 的查询将类似于:

select u.username, ci.email
from users u, contact_info ci
where u.username = 'paxdiablo'
and u.ci_id = ci.id;

关于php - 无法关联两个 MySQL 表(外键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032346/

相关文章:

php - 打印行为 PHP

php - 为什么我需要在 foreach 循环后取消设置 $value

javascript - 如何在开源 php 迷你购物车中应用 ajax 或 javascript?

php - 更新后增加表单

php - 与 INNER JOIN 重复甚至与 DISTINCT

mysql - SQL 查询 - 显示所有可用和不可用的 ChairNo

php - 日期和时间默认输出到 mySQL 数据库中

php - 运行 Nginx 和 PHP5-FPM 时无法更新到最新的 PHPMyAdmin

java - Java 中的数据库查询

php - 我如何使用 PHP 将 sql 属性回显到 HTML 表