Php 使用单个sql查询优化我的sql代码

Php 使用单个sql查询优化我的sql代码,php,mysql,sql,Php,Mysql,Sql,我有下列表格 表上的数据 用户: 职位: 类似职位的数据: Id post_id liked_by 1 1 2 //post id=1 liked by user=2 2 1 1 //post id=1 like by user=1 最喜欢的帖子上的数据 Id post_id favourite_by 1 1 1 //post id=1 favourited by user=1 2 2 1

我有下列表格


表上的数据 用户:

职位:

类似职位的数据:

Id  post_id         liked_by
1   1       2   //post id=1 liked by user=2
2   1       1   //post id=1 like by user=1
最喜欢的帖子上的数据

Id  post_id     favourite_by
1   1       1   //post id=1 favourited by user=1
2   2       1   //post id=2 favourited by user=1
我尝试使用单个sql字符串进行查询,因为它可以很好地处理多个sql查询。 我有一个post区域,在那里我可以使用PDO execute来显示它 PHP代码显示帖子和喜欢的东西等

<?php
DBCon Class has the PDO Connection parameters
function selectQuery($str){
    $c=new DBCon();
    $con=$c->conN();
    $stmt=$con->prepare($str);
    $stmt->execute();
    $row=$stmt->fetch();
    return $row;
}
function selectQueries($str){
    $c=new DBCon();
    $con=$c->conN();
    $stmt=$con->prepare($str);
    $stmt->execute();
    $rows=$stmt->fetchAll();
    return $rows;
}

$strPosts=”SELECT * FROM post”;
$rows=selectQueries($strPosts);
foreach($rows as $row){
    $pid=$row[‘pid’];
    echo $row[‘body’];
    $strLike=”SELECT * FROM like where post_pid=”.$pid.” LIMIT 1”;
    $rowLike=selectQuery($strLike);
    echo $rowLike[‘liked_by’];
    $strFav=”SELECT * FROM favourite WHERE post_pid=”.$pid.” LIMIT 1”;
    $rowFav=selectQuery($strFav);
    echo $rowFav[‘favourite_by’];
}
?>


这段代码运行良好,虽然我的帖子数量非常少,但如果帖子数量很大,这将使我的页面速度非常慢。因此,我如何在SQL查询中使用单个代码来优化它,以便获得所有POST值,如值和最喜欢的值。

解决方案不一定是使用单个查询(尽管这可能会使您作为开发人员的生活更轻松)。使其快速运行的方法是索引:要加入的列应该有索引

下面是一个例子:

SELECT *
FROM User u
    JOIN Post p ON p.by_uid=u.uid
这个简单的示例将获得所有用户及其关联的帖子


为了确保高效运行,您需要在
Post.by\u uid
上添加一个索引-这将允许服务器为每个用户快速找到合适的帖子。如果没有索引,服务器将不得不扫描
Post
表中的每一行
User
表中的每一行,只是为了检查
Post
行中的
by uid
值是否与当前的
User.uid
值匹配。

您使用的是智能/卷曲引号;用普通引号替换它们。我在office word 2013中已经准备好了这个问题,所以在实际的php代码中,我同意这个问题。您为什么不使用
SQL连接
?以您希望的方式运行它,但我建议您不要使用word来“编码”并从中粘贴代码。这让很多人都大吃一惊,包括我自己,这是实际代码的一部分还是可能发生的任何错误的一部分。我不知道如何使用sql join返回每个表的所有列OK,但如何使用此代码获得like id和favorite id等
Id  post_id     favourite_by
1   1       1   //post id=1 favourited by user=1
2   2       1   //post id=2 favourited by user=1
<?php
DBCon Class has the PDO Connection parameters
function selectQuery($str){
    $c=new DBCon();
    $con=$c->conN();
    $stmt=$con->prepare($str);
    $stmt->execute();
    $row=$stmt->fetch();
    return $row;
}
function selectQueries($str){
    $c=new DBCon();
    $con=$c->conN();
    $stmt=$con->prepare($str);
    $stmt->execute();
    $rows=$stmt->fetchAll();
    return $rows;
}

$strPosts=”SELECT * FROM post”;
$rows=selectQueries($strPosts);
foreach($rows as $row){
    $pid=$row[‘pid’];
    echo $row[‘body’];
    $strLike=”SELECT * FROM like where post_pid=”.$pid.” LIMIT 1”;
    $rowLike=selectQuery($strLike);
    echo $rowLike[‘liked_by’];
    $strFav=”SELECT * FROM favourite WHERE post_pid=”.$pid.” LIMIT 1”;
    $rowFav=selectQuery($strFav);
    echo $rowFav[‘favourite_by’];
}
?>
SELECT *
FROM User u
    JOIN Post p ON p.by_uid=u.uid