如何使用 PHP 和 MySqli 优化嵌套查询?
How to optimize nested query with PHP and MySqli?
我有这段代码,它从 MySQLi 中的两个 table 中获取数据。
它首先必须从 table 1 中获取标题、描述、状态和 project_id,然后使用 table 1 中的 ID 从 table 2 中获取名称。
有没有 better/faster 方法来做到这一点?我在 table 中有大约 600 行,运行 这个查询大约需要 5 秒。我还要补充一点,这个例子有点简化,所以请不要评论 db-structure.
<?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;
}
}
?>
您可以在 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;
}
}
tables 在这里有别名 - t
代表 table
和 p
代表 projects
.
另外为了让它更快,在table
table中添加索引到project_id
,如果你还没有这样做的话:
$connect()->db_connection->query('ALTER TABLE `table` ADD INDEX `product_id`');
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
尝试在查询中使用 JOIN
。
您可以在此处找到此命令的示例和说明:http://www.w3schools.com/sql/sql_join.asp
另请查看此信息图表:
http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg
我有这段代码,它从 MySQLi 中的两个 table 中获取数据。 它首先必须从 table 1 中获取标题、描述、状态和 project_id,然后使用 table 1 中的 ID 从 table 2 中获取名称。
有没有 better/faster 方法来做到这一点?我在 table 中有大约 600 行,运行 这个查询大约需要 5 秒。我还要补充一点,这个例子有点简化,所以请不要评论 db-structure.
<?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;
}
}
?>
您可以在 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;
}
}
tables 在这里有别名 - t
代表 table
和 p
代表 projects
.
另外为了让它更快,在table
table中添加索引到project_id
,如果你还没有这样做的话:
$connect()->db_connection->query('ALTER TABLE `table` ADD INDEX `product_id`');
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
尝试在查询中使用 JOIN
。
您可以在此处找到此命令的示例和说明:http://www.w3schools.com/sql/sql_join.asp
另请查看此信息图表: http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg