繁体   English   中英

数据库多表查询和显示结果

[英]Database Multiple Table Query and Display Results

大家好,我正在使用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        |
 |                  |
 --------------------

创建一个变量来存储每次迭代的项目ID,然后将其与实际项目ID进行比较,如果不同,则显示项目信息。 这样的事情。

<?php
 $beforeProject = '';
 foreach($projects->result() as $p):
?>
    <td><?php if ($beforeProject != $p->projectId) { echo $p->projectId; } ?></td>

     //rest of code

   <?php $beforeProject = $p->projectId; ?>
<?php endforeach; ?>

虽然我认为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,该信息仅显示一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM