php - 像使用一张表一样使用两张表

标签 php mysql sql database join

我有两个不同类型的用户表。其中之一是注册用户的普通用户表。另一种是针对未注册用户的。 我需要将这两个表与其他表一起使用。例如;

注册用户:用户 ID、用户名、密码、姓名、性别、电子邮件、IP

unregistered_users:用户 ID、姓名、性别、IP

some_table: ID、标题、内容、用户 ID

如何将 some_table 与 user 表连接?

我有一些意见,但没有一个感觉不对。

  1. 使用所有带有空值的表 regUser 列和 unRegUser 列 并连接两个表等。这种方式不适合,因为所有表 有很多空单元格。
  2. 如果像 some_table 这样的所有表都添加一列 userType 和每个查询 有“如果”。但这种方式耗时长、耗费资源。
  3. 如果 userid 列类型为字符串 (r13, u32 - r:registered, u:unregistered) 并使用“substring”和“if”,但这更多 困难
  4. 创建一个连接表,如“id、type、userid”并使用此 id 而不是用户 ID。但还需要“如果”
  5. 创建一个连接表,如“id, regUser, unRegUser”,其中包含 null 值(value)观。

或者创建一个不同的用户表来组合两个用户表。当然,我们又出现了空列。

你认为哪种方式最好?或者谁有不同意见。

最佳答案

当内容相同时,为什么要尝试通过创建两个表来复制它,而不是创建一个名为 users 的表

create table users
(
user_id int not null auto_increment primary key
username varchar(500),
password varchar(500),
email  varchar(400),
ip     varchar(800),
reg_status enum(0,1),
);

然后您可以使用此 user_id 并将其引用到您的辅助表。

您可以在 reg_status 上构建查询

0 - Unregisterd
1 - Registered

如果你想要更标准化的表格

那么你可以使用两个表

create table users
(
user_id int not null auto_increment primary key
email  varchar(400),
ip     varchar(800),
reg_status enum(0,1),
);


create table registered_users
(
login_id int not null auto_increment primary key
username varchar(500),
password varchar(500),
user_id - F.k (Foreign Key)
);

关于php - 像使用一张表一样使用两张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24839800/

相关文章:

php - 如何在mysql中解密密码

php - 优化我项目的场景对象

php - 尝试通过 PHP/MySQL 下载 Blob

mysql - 禁用特定表的 BinLogging,在哪里执行参数更改

php - 在 Amazon EC2 实例上安装 php 和 apache

php - Macports 切换 PHP CLI 版本

php - mysql 结果到数组写入 csv 文件?

mysql - 获取MySQL中引用的表

mysql - 为什么 select join 与 enry table 时类别名称为空

sql - 确定哪一列导致字符串或二进制数据被截断。 : SQL server