PHP从另一个表格获取信息

问题描述:

如何从另一个表格获取一行信息,而无需每个循环都有SELECTPHP从另一个表格获取信息

//get posts from "posts" table 
$stmt = $dbh->prepare("SELECT * FROM posts WHERE user_id = :user_id"); 
$stmt->bindParam(':user_id', $userId); 
$stmt->execute(); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

foreach ($result as $row) { 
    echo $row['post']; 

    //get poster's full name from "users" table 
    $stmt = $dbh->prepare("SELECT * FROM users WHERE user_id = :user_id"); 
    $stmt->bindParam(':user_id', $row['poster_id']); 
    $stmt->execute(); 
    $result2 = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    foreach ($result2 as $row2) { 
     echo $row2['full_name']; 
    } 
} 

如何让此代码更高效更快?

想象一下,如果我有1000个帖子,并且每个帖子都是由其他用户发布的。我需要获取发布帖子的用户的全名。现在,我需要SELECT 1000次,因为那1000个用户。现在看起来效率很低。我怎样才能让它变得更好?

我听说加入可能有效吗?有什么解决方案?

+0

您在询问Performance。当这样一个问题出现时,我总是觉得有必要链接这个好文章:http://ericlippert.com/2012/12/17/performance-rant/ 那么是否存在需要解决的实际问题?瓶颈究竟在哪里?这个数据有多大可能会改变(你能缓存它)吗? – Christopher

+0

@Christopher想象一下,如果我有1000个帖子,并且每个帖子都是由其他用户发布的。我需要获取发布帖子的用户的全名。现在,我需要为这1000个用户“选择”1000次。现在看起来效率很低。我怎样才能让它变得更好? – baileyJchoi

+0

@MattiaDinosaur你能举个例子吗? – baileyJchoi

SELECT * FROM posts 
JOIN users ON posts.user_id = users.id 
WHERE posts.user_id = :user_id. 

你是对的,加入用户表到你的帖子查询将会更快。

您可以通过增加性能来缓解查询结果,如memcache,然后在添加或删除帖子时清除缓存。这样,每次需要这些数据时都不需要打你的分贝。

+0

好,但我将如何访问变量?例如从$ row ['post']'和'$ row2 ['full_name']' – baileyJchoi

+0

同样,联合查询只会从两个表中返回列。所以你不需要$ row2或内部循环。一切都将在$行中可用。 –

+1

我同意Ryan Tiosto的解决方案。然而,你的问题似乎是关于SQL连接,而不是PHP了。忘记PHP方面的咒语。在理解SQL之前,您无法对PHP进行编码:https://www.w3schools.com/sql/sql_join.asp – Christopher