Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库获取多个用户名_Php_Mysql - Fatal编程技术网

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

Php 从数据库获取多个用户名,php,mysql,Php,Mysql,我在一个网站上有一个评论部分,如果可能的话,我想简化一下,这样就不会对数据库造成太大的影响。当用户选择一篇文章时,如果它有与之相关联的评论,它会列出评论。当注释列表打开时,它从另一个表中获取用户名。我将用户的id存储在comments表中,并使用该id从users表中选择记录。并显示为“用户”所说的: 假设我在一篇帖子上有1000条评论,它会点击用户表1000次以获取用户名。我认为这可能是一个糟糕的设计。我想到了一些解决方案,但不知道在这种情况下会推荐什么 我是否应该将用户名存储在comment

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

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

我是否应该将用户名存储在comments表中

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

将所有用户名放在一个文件中,然后从该文件调用

还是有其他我没有想到的解决方案

我有点困惑。我认为我在评论表中使用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

这就是
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"

您是否允许同一用户名被多次使用?如果没有,那么我将使用
用户名
字段作为
用户
表的主键,并将其作为FK存储在
注释
表中。那会很好地解决你的问题


如果更改
用户
表的主键是一个太大的问题,那么只需将用户名存储在
注释
部分,因为您仍然可以使用它从
用户
表中选择一条记录。

听起来您的注释表中有一个userID字段,但需要查找用户名,对吗?如果是这样,加入将是最好的解决方案

比如:

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

要阅读更多关于连接及其无限可能性的信息,请阅读“从评论中选择*”,然后在评论中加入用户。posterid=users.id


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

您是使用
连接还是执行多个查询?最好是将表方案添加到问题中。如果您的表中有关系,而不是使用连接,则无需在每次只有一个查询包含所有信息时触发查询。@JaredFarrish当我获取用户名时,我正在进行多个选择查询您需要使用
JOIN
s尽可能从与当前查询相关的其他表中引入数据。感谢链接。我已经使用过tizag.com好几次了。出于某种原因,我似乎无法理解加入。并不是我不理解他们,他们只是把我设置查询弄糊涂了。