【问题标题】:Database Multiple Table Query and Display Results数据库多表查询并显示结果
【发布时间】:2013-10-24 19:17:22
【问题描述】:

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

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

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

    【讨论】:

    • 我将该代码放入我的视图中,它运行良好。非常感谢你帮助我。
    【解决方案2】:

    创建一个变量来存储每次迭代的项目 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; ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2018-11-03
      相关资源
      最近更新 更多