Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP和MySqli优化嵌套查询?_Php_Mysqli - Fatal编程技术网

如何使用PHP和MySqli优化嵌套查询?

如何使用PHP和MySqli优化嵌套查询?,php,mysqli,Php,Mysqli,我有一段代码,它从MySQLi中的两个表中获取数据。 它首先必须从表1中获取标题、描述、状态和项目id,然后使用表1中的id从表2中获取名称 有没有更好/更快的方法?我在表中有大约600行,运行这个查询大约需要5秒。我还要补充一点,这个例子有点简化,所以请不要评论db结构 <?php $results = $connect()->db_connection->query( 'SELECT title, description, status, project_id

我有一段代码,它从MySQLi中的两个表中获取数据。 它首先必须从表1中获取标题、描述、状态和项目id,然后使用表1中的id从表2中获取名称

有没有更好/更快的方法?我在表中有大约600行,运行这个查询大约需要5秒。我还要补充一点,这个例子有点简化,所以请不要评论db结构

<?php
$results = $connect()->db_connection->query(
    'SELECT title, description, status, project_id 
     FROM table 
     WHERE created_by ='.$user_id
);

if ($results) {
    while ($result = $results->fetch_object()) {
        $res = $connect()->db_connection->query(
            "SELECT name FROM projects WHERE id = ".$result->project_id
        );
        if ($res) {
             while ($r = $res->fetch_object()) { 
                echo $r->name;      
            }   
        }
     echo $result->title; 
     echo $result->status; 
    }
}     
?>

您可以在
项目id
上使用
加入

$results = $connect()->db_connection->query('SELECT t.title title,t.description,t.status status,t.project_id, p.name name FROM `table` t JOIN projects p ON p.id= t.project_id WHERE t.created_by ='.$user_id);
if($results){
   while($result = $results->fetch_object()){
        echo $result->name;
        echo $result->title; 
        echo $result->status; 

    }
} 
表在这里有别名-
t
用于
table
p
用于
项目

此外,为了加快速度,如果您尚未完成,请在
表中的
项目id
中添加索引:

$connect()->db_connection->query('ALTER TABLE `table` ADD INDEX `product_id`');

尝试在查询中使用
JOIN

您可以在此处找到此命令的示例和说明:

还可以查看此信息图表:

您需要使用
加入
Use Query:
    SELECT title,description,status,project_id 
    FROM table tb
    inner join projects pr on pr.id = tb.project_id
    WHERE created_by = $user_id