我有 2 个 MySQL 表,如下所示:
类别:
+---------------+--------------------+
| id | category_name |
+---------------+--------------------+
| 1 | Category 1 |
| 2 | Category 2 |
+---------------+--------------------+
任务:
+---------------+---------------------------+-----------------+
| id | task_name | category_id |
+---------------+---------------------------+-----------------+
| 1 | First task of the day | 1 |
| 2 | Then do this | 1 |
+---------------+---------------------------+-----------------+
这是我的数据库的简化版本,但您明白了。
我想将类别显示为以下任务后面的标题,例如:
Category 1
- First task of the day
- Then do this
Category 2
no tasks here :)
我倾向于做这样的事情......
$query = $this->db->query("SELECT * FROM categories");
foreach($query->result() as $cat){
echo '<h1>'. $cat->category_name . '</h1>';
$tasks_query = $this->db->query("SELECT * FROM tasks WHERE category_id='{$cat->id}'");
foreach($tasks_query->result() as $task){
echo $task->task_name;
}
}
我知道这会起作用,但似乎所有这些查询都会占用大量资源。所以,我想知道这是否是正确的方法,或者是否有更好、更有效的方法。这样做的最佳实践方法是什么?
希望这一切都有道理。
最佳答案
如果你在 SQL 查询中使用 join
,它会给数据库带来更多的负担,而不是 PHP 引擎(它会更快并且占用更少的资源,因为你在循环中运行一个查询而不是多个查询)。
$query = $this->db->query(
'SELECT *
FROM tasks t
INNER JOIN categories c
ON t.category_id = c.id');
foreach ( $query->result() as $result) {
echo $result->category_name . ' ' . $result->task_name;
}
关于php - 从另一个表获取相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175278/