如何从另一个表中获取行信息,而不必每次循环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次。现在看起来效率很低。我怎样才能做得更好?
我听说加入可能有用吗?有什么解决方案?
答案 0 :(得分:4)
SELECT * FROM posts
JOIN users ON posts.user_id = users.id
WHERE posts.user_id = :user_id.
你是对的,将用户表加入你的帖子查询会更快。
为提高性能,您可以做的其他事情是将查询结果缓存在memcache之类的内容中,然后在添加或删除帖子时清除缓存。这样,每次需要这些数据时,您都不需要点击数据库。