PHP从另一个表中获取信息

时间:2017-05-07 00:55:12

标签: php mysql sql pdo

如何从另一个表中获取行信息,而不必每次循环SELECT

//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个帖子,每个帖子都由不同的用户发布。我需要获得发布帖子的用户的全名。现在,由于这1000个用户,我需要SELECT 1000次。现在看起来效率很低。我怎样才能做得更好?

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

1 个答案:

答案 0 :(得分:4)

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

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

为提高性能,您可以做的其他事情是将查询结果缓存在memcache之类的内容中,然后在添加或删除帖子时清除缓存。这样,每次需要这些数据时,您都不需要点击数据库。