我有两张桌子: 包含以下列的用户:
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列中自动更改。
答案 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而不是名称。