两个表之间的关系(MySQL)

时间:2016-05-28 09:34:45

标签: mysql

我有两张桌子: 包含以下列的用户:

userID int(11) AUTO_INCREMENT PRIMARY KEY
name varchar(50)
address varchar(30)
phone varchar(11)
email varchar(255)
username int(9) 
password int(9)
account_permissions enum('a','b','c')
status enum('0','1')

和 私有消息表,包含以下列:

 id auto_increment primary key
to_user varchar(50)
from_user varchar(50)
subject varchar(400)
message text
date date 
del  tinyint(1) default value 0 

如果用户的名字将来会发生变化,我该如何连接这两个表,所以我希望它会在to_user / from_user列中自动更改。

1 个答案:

答案 0 :(得分:1)

您应该更改私人消息表,使to_user的from_user列为INT(11)。它们应该是users表userID列的外键。

这样,如果您更改了users表中的用户名,则联接将保持不变并且不受影响,因为它由唯一用户标识符连接。

另外我知道用户名和密码字段应该是varchar而不是int?

所以你可能有:

users
userID int(11) AUTO_INCREMENT PRIMARY KEY 
name varchar(50) 
address varchar(30) 
phone varchar(11) 
email varchar(255) 
username varchar(9)
password varchar(9) 
account_permissions enum('a','b','c') status enum('0','1')

messages
id auto_increment primary key 
to_user int(11)
from_user int(11)
subject varchar(400) 
message text 
date date 
del tinyint(1) default value 0

然后你可以看看这样的消息:

SELECT
    fromuser.username AS from_user,
    touser.username AS to_user,
    messages.subject,
    messages.message,
    messages.date
FROM
    messages
INNER JOIN
    users AS fromuser ON messages.from_user = fromusers.userID
INNER JOIN
    users AS touser ON messages.to_user = tousers.userID

或者如果您想添加新邮件,只需插入用户ID而不是名称。