php - 从另一个表获取相关数据

标签 php mysql

我有 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/

相关文章:

php - 如何在 symfony 2/3 中关闭 session ?

php - 如何将 DATEJS 合并到 PHP 驱动的表单中?

mysql - 错误: while trying to restart mysql

mysql - 在 MySQL 中选择元组链,邻接列表?

MySQL 将行转换为动态列数

php - 二级 key 的用途

php - 我如何为多个学生插入多个标记 mysql

php - PHP的 fatal error

php - Yii 表前缀 无法读取带有该前缀的表

MySQL 查询 - 检查数据行是否包含 user_id