php - 数据库多表查询显示结果

标签 php mysql database

大家好,我正在使用 codeigniter 构建项目管理系统。

我的模型中有一个函数可以显示项目和与之关联的任务。 $projectId = 1 仅用于测试目的。

function getAllProjects($projectId = 1)
 {

  $this->db->select('*');    
  $this->db->from('projects');
  $this->db->where('projects.projectId', $projectId);
  $this->db->join('projectTasks', 'projects.projectId = projectTasks.projectId');
  $this->db->join('tasks', 'projectTasks.taskId = tasks.taskId');
  $projects = $this->db->get();
  return $projects;
}

然后在我看来我让它显示结果

<?php if($projects->num_rows() > 0): ?>
  <table width="100%">
    <?php foreach($projects->result() as $p): ?>
      <tr>

        <td><?php echo $p->projectId; ?></td>
        <td><?php echo $p->projectName; ?></td>
        <?php foreach($projects->result() as $g): ?>
             <td><?php echo $g->taskName; ?></td>
             <td><?php echo $g->taskHours; ?></td>
             <td><?php echo $g->taskCost; ?></td>
        <?php endforeach; ?>


        </td>
      </tr>
    <?php endforeach; ?>
  </table>
<?php else: ?>
    <p>No projects at this time.</p>
<?php endif; ?>

返回这个

  ID - Project Name - Task Name - Task Hours - Task Cost (**to show you what field is what**)
  1 The Range 702   Contact Form      10         100            Custom Logo Desgin  10  100 Custom Login From   5   75
  1 The Range 702   Contact Form      10         100            Custom Logo Desgin  10  100 Custom Login From   5   75
  1 The Range 702   Contact Form      10         100            Custom Logo Desgin  10  100 Custom Login From   5   75

有人可以告诉我如何制作它,以便它只显示一次项目信息,然后显示与项目相关的每个任务。现在,对于与项目关联的每个任务,它都会再次列出项目和所有任务。

表格

 -----------------------
 |       projects      |
 -----------------------
 |  projectId          | (Primary)
 |  projectName        |
 |  projectHours       |
 |  projectDeadline    |
 |  projectStartDate   |
 |  projectTasks       |
 |  projectUsers       |
 |  projectNotes       |
 |                     |
 -----------------------

 -----------------------
 |     projectTasks    |
 -----------------------
 |  projectTasksId     | (Primary)
 |  projectId          | (FK project->projectId)
 |  taskId             | (FK tasks->taskId)
 |                     |
 -----------------------

 --------------------
 |      tasks       |
 --------------------
 |  taskId          | (Primary)
 |  taskName        |
 |  taskHours       |
 |  taskCost        |
 |                  |
 --------------------

最佳答案

虽然我认为 Jorge Campos 解决方案已经接近尾声,但它不会阻止任务被多次列出。

   <?php $ProjectId = ''; ?>
      <?php if($projects->num_rows() > 0): ?>
        <table width="100%">
          <?php foreach($projects->result() as $p): ?>
            <tr>
              <?php if ($ProjectId != $p->projectId) { ?>
              <td><?php echo $p->projectId; ?></td>
              <td><?php echo $p->projectName; ?></td>

                <?php foreach($projects->result() as $g): ?>
                    <td><?php echo $g->taskName; ?></td>
                    <td><?php echo $g->taskHours; ?></td>
                    <td><?php echo $g->taskCost; ?></td>
               <?php endforeach; ?>

             <?php } ?>
       <?php $ProjectId = $p->projectId; ?>

            </tr>
          <?php endforeach; ?>
        </table>
      <?php else: ?>
        <p>No projects at this time.</p>
      <?php endif; ?>

此解决方案将使每个 projectId 的信息只显示一次。

关于php - 数据库多表查询显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574669/

相关文章:

php - MySQL best/first 分差查询优化

PHP 多单选按钮数组

mysql - 使用 Heroku ClearDB 插件更改 MySQL auto_increment

sql - 如何将这些列转换/转置为 SQL 中的行?

php - 在我的机器上 localhost 与 mysql 的 127.0.0.1 不同

php - 在默认 View 之前加载客户端 View (如果存在)

php - 如何打印group_concat函数的输出

mysql - 从托管在不同服务器上的多个 mysql 数据库生成报告

sql - 从数据库中选择最大值

php - 检查空白数组时出现什么问题?