从数据库中获取多个用户名

时间:2011-10-08 20:50:09

标签: php mysql

我在网站上有一个评论部分,如果可能的话我想简化一下,这对数据库的影响不大。当用户选择一个帖子,并且如果它有与之关联的评论时,它会列出评论。当评论列表时,它从另一个表中获取用户名。我将用户的id存储在comments表中,并使用该id从users表中选择记录。并显示为“用户”说:

假设我对一篇帖子有1000条评论,它会点击用户表1000次以获取用户名。我认为这可能是一个糟糕的设计。我想到了一些解决方案,但不知道在这种情况下会推荐什么。

我应该只是将用户名存储在评论表中吗?

我应该存储已在会话数组中调用的所有用户名吗?

将所有用户名放在一个文件中,并从文件中调用?

还是有其他我没有想过的解决方案吗?

我有点困惑。我认为通过使用注释表中的ID,然后使用它来获取用户名,我做了正确的事情,但在阅读了大约一百万个帖子后,对数据库的影响较小,我开始质疑自己。

哇,谢谢你所有有用的答案。这是表格方案,我不知道为什么我原来没有投入。

笑话评论表:

id | author_id | joke_id | date_created | body
---+-----------+---------+--------------+-----
1  |     3     |    2    | 2011-06-12   | this is a comment

和用户:

id | user_name | password | email | date_joined | visible
---+-----------+----------+-------+-------------+---------
 3 |   booboo  | password | email | todays_date |    1

4 个答案:

答案 0 :(得分:3)

这是JOIN的用途 - 这样您就可以运行单个查询并有效地从多个表中获取组合信息。 E.g:

SELECT comments.id, comments.content, users.name
FROM comments
JOIN users ON comments.user = users.id
WHERE comments.id in (1,2,3)

会查找ID为1,2和3的3条评论,并且还会获取每个评论者的用户名,并返回如下所示的行:

comments.id | comments.content  | users.name
------------+-------------------+---------
1           | "First comment."  | "Poster1"
2           | "Second comment." | "Poster2"
3           | "Third comment."  | "Poster3"

答案 1 :(得分:3)

听起来你的评论表中有一个userID字段,但是需要查找用户名,对吗?如果是这样,JOIN将是最好的解决方案。

类似的东西:

SELECT *
FROM `comments`
LEFT JOIN `users` ON `users`.`id` = `comments`.`userid`
WHERE `postid`='1'

要阅读有关联接及其无限可能性的更多信息,请阅读here

答案 2 :(得分:0)

SELECT * FROM comments LEFT JOIN users ON comments.posterid = users.id

Google for LEFT JOIN获取更多信息:)

答案 3 :(得分:-1)

您是否允许多次使用相同的用户名?如果没有,那么我会使用username字段作为users表的PK,并将其作为FK存储在comments表中。这将很好地解决你的问题。

如果更改users表的PK太大问题,那么只需将用户名存储在comments部分,因为您仍然可以使用该选项从{{1}中选择一条记录表格。