2011-10-08 81 views
2

我在网站上有一个评论部分,如果可能的话,我想简化一下,所以它对数据库没有那么大的影响。当用户选择帖子时,如果它有与其相关的评论,它会列出评论。当评论列表时,它从另一个表中提取用户名。我将用户的ID存储在注释表中,并使用该ID从用户表中选择记录。并显示为“用户”说:从数据库中获取多个用户名

可以说我对一个帖子有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 
+0

你你使用'JOIN',还是做多个查询? –

+1

如果您将表格方案添加到问题中会更好。 –

+0

如果您的表中存在关系而不是使用**连接**每次只有一个包含所有信息的查询时,不需要触发查询。 – punit

回答

3

这是JOIN s为为 - 让您可以运行一个查询,高效地获取综合信息来自多个表格。例如:

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

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

如果更改您的users表的PK值太大,则请将用户名存储在comments部分,因为您仍然可以使用该表从users表中选择单个记录。

+1

-1,重新设计一个数据库以避免连接是....没有帮助。 – Johan

3

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

喜欢的东西:

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

要了解更多关于加入和他们的无限可能,阅读起来here

+0

感谢您的链接。我用过几次tizag.com。出于某种原因,加入似乎在我的头上。这并不是我不明白他们,他们只是让我迷惑我设置查询。 –

0

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

谷歌为LEFT JOIN更多信息:)