PHP从另一个表格获取信息
如何从另一个表格获取一行信息,而无需每个循环都有SELECT
?PHP从另一个表格获取信息
//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个用户。现在看起来效率很低。我怎样才能让它变得更好?
我听说加入可能有效吗?有什么解决方案?
SELECT * FROM posts
JOIN users ON posts.user_id = users.id
WHERE posts.user_id = :user_id.
你是对的,加入用户表到你的帖子查询将会更快。
您可以通过增加性能来缓解查询结果,如memcache,然后在添加或删除帖子时清除缓存。这样,每次需要这些数据时都不需要打你的分贝。
好,但我将如何访问变量?例如从$ row ['post']'和'$ row2 ['full_name']' – baileyJchoi
同样,联合查询只会从两个表中返回列。所以你不需要$ row2或内部循环。一切都将在$行中可用。 –
我同意Ryan Tiosto的解决方案。然而,你的问题似乎是关于SQL连接,而不是PHP了。忘记PHP方面的咒语。在理解SQL之前,您无法对PHP进行编码:https://www.w3schools.com/sql/sql_join.asp – Christopher
您在询问Performance。当这样一个问题出现时,我总是觉得有必要链接这个好文章:http://ericlippert.com/2012/12/17/performance-rant/ 那么是否存在需要解决的实际问题?瓶颈究竟在哪里?这个数据有多大可能会改变(你能缓存它)吗? – Christopher
@Christopher想象一下,如果我有1000个帖子,并且每个帖子都是由其他用户发布的。我需要获取发布帖子的用户的全名。现在,我需要为这1000个用户“选择”1000次。现在看起来效率很低。我怎样才能让它变得更好? – baileyJchoi
@MattiaDinosaur你能举个例子吗? – baileyJchoi