【问题标题】:How to optimize nested query with PHP and MySqli?如何使用 PHP 和 MySqli 优化嵌套查询?
【发布时间】:2015-04-08 12:33:11
【问题描述】:

我有这段代码,它从 MySQLi 中的两个表中获取数据。 它首先要从表 1 中获取 title、description、status 和 project_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; 
    }
}     
?>

【问题讨论】:

标签: php mysqli


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    尝试在您的查询中使用JOIN

    您可以在此处找到此命令的示例和说明:http://www.w3schools.com/sql/sql_join.asp

    还请查看此信息图表: http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg

    【讨论】:

      【解决方案3】:

      您可以在project_id 上使用JOIN

      $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 代表 tablep 代表 projects

      另外为了让它更快,如果您还没有这样做,请在table 表中为project_id 添加索引:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-24
        • 2019-06-10
        • 1970-01-01
        相关资源
        最近更新 更多