在php / mysql中使用连接或多个查询

时间:2010-05-03 12:12:13

标签: php mysql

这里我需要帮助加入。 我有两个表说文章和用户。 在显示文章时,我还需要显示用户信息,如用户名等。 因此,如果我只是使用连接来加入文章和用户表来获取用户信息,同时显示如下文章,那会更好。

SELECT a.*,u.username,u.id FROM articles a JOIN users u ON u.id=a.user_id

或者可以在PHP中使用这个。 首先我得到以下sql的文章

SELECT * FROM articles

然后在我得到文章数组之后我循环并在每个循环中获取用户信息,如下所示

SELECT username, id FROM users WHERE id='".$articles->user_id."';

哪个更好,我可以解释为什么。 感谢您的回复或意见

4 个答案:

答案 0 :(得分:5)

还有第三种选择。你可以先得到文章:

 SELECT * FROM articles

然后一次性获取所有相关用户名:

 SELECT id, username FROM users WHERE id IN (3, 7, 19, 34, ...)

这样,您只需要两次而不是多次访问数据库,但是您不会获得重复数据。话虽如此,您的查询中似乎没有那么多重复的数据,所以在这种特定情况下第一个查询也可以正常工作。

由于其简单性,我可能会在这种特定情况下选择您的第一个选项,但如果您需要为每个用户提供更多信息,请选择第三个选项。我可能不会选择你的第二个选项,因为它既不是最快的也不是最简单的。

答案 1 :(得分:3)

这取决于查询返回的数据量 - 如果您将获得大量重复数据(即一个用户撰写了大量文章),您最好分别进行查询。

如果您没有大量重复数据,则连接始终是首选,因为您只需访问数据库服务器。

答案 2 :(得分:2)

如果适用/可能,第一种方法更好:

SELECT a.*, u.username, u.id 
FROM articles a 
JOIN users u ON u.id = a.user_id
  • 你必须少写代码
  • 无需运行多个查询
  • 在可能的情况下使用连接是理想的

答案 3 :(得分:0)

使用一个查询获取文章,然后获取每个用户名一次,而不是每次显示它(将它们缓存在数组或其他任何内容中)。