2013-08-21 55 views
1

我有一个表“用户”与列:是否可以使用主键引用在列中插入值?

user_id(PK), user_firstname, user_lastname 

和另一个表“房间”与列:

event_id(PK), user_id(FK), user_firstname, user_lastname....(and more columns). 

我想知道是否有可能填补user_firstnameuser_lastname自动只知道user_id列。

喜欢user_firstname默认值将是这样的:“选择users.user_firstname其中users.user_id = user_ID的”

我不知道是否足够......清晰正如你可以看到我的数据库知识非常狭窄。

+1

如果你有FK user_id,为什么你在'room'里存储'user_firstname'和'user_lastname'? – peterm

+0

因为我想输出一个查询,如:SELECT * FROM room;并使用PHP将其编码为JSON,所以我可以访问user_firstname和user_lastname –

回答

4

要达到可以与JOIN s内完成什么。他们将避免那些冗余的user_firstnameuser_lastname列。所以查询室的桌子上,当你只是从两个表中获取,你会得到的users额外的列到结果集:

SELECT * FROM room AS r INNER JOIN users AS u ON r.user_id = u.user_id; 

我们在这里所做的事称为正常化。另一个重要的照顾是外键约束和他们的级联,在你的情况room.user_id references user.user_id。 A deleteuser应该最有可能级联到room,如果你想删除用户,而不是标记它们被删除。

+0

嗯,我看到了..谢谢大家的答案!我想我现在明白了:D –

+0

是的,这项工作在我的项目中完美呵呵再次感谢! –

+0

不客气! – Sam

4

列user_firstname和user_lastname不属于您的房间表。 user_id列引用用户表,这就是你所需要的。 选择数据,你可以使用JOIN语句,像

SELECT R.event_id, R.user_id, U.user_firstname, U.user_lastname 
FROM room AS R 
JOIN users AS U ON R.user_uid = U.user_id 
2

这里的答案是横向的问题。你不要想要一个user_firstnameuser_lastname列在事件表中。 user_id是整个用户表的那一行的代理。当您需要访问user_firstname时,请在公共列上的两个表中执行JOIN

相关问题