2016-10-26 5 views
0

私はmysqlデータベースのCRUD操作、具体的にはPDOに関するチュートリアルに従っています(これは関係ないと思います)。ループを理解するmysql CRUD

時間トラッカーです。プロジェクトテーブルとタスクテーブルによって形成される。すべてのタスクはプロジェクトに属します。プロジェクトは複数のタスクを持つことができますが、タスクは1つのプロジェクトにしか属しません。私は、プロジェクトを含む「レポート」ページを表示する必要があります。そして、各プロジェクトに費やされた時間とともにそのプロジェクトのタスクのリスト、そして各プロジェクトの最後に、そのプロジェクトに費やされた合計時間を表示する必要があります。

これはレポートを表示するテーブルです。最後のプロジェクトには合計がありませんが、それはチュートリアルでさらに議論される問題です。

<?php 
$filter = 'all'; 
?> 
<table> 
    <?php 
    $total = $project_id = $project_total = 0; 
    foreach (get_tasks_list($filter) as $item) { 
     if ($project_id != $item['project_id']) { 
      if ($project_id > 0) { 
       echo '<tr>'; 
       echo '<th colspan="2">Project Total</th>'; 
       echo '<th>' . $project_total . '</th>'; 
       echo '</tr>'; 
       $project_total = 0; 
      } 
      $project_id = $item['project_id']; 
      echo '<thead>'; 
      echo '<tr>'; 
      echo '<td>' . $item['project'] . '</td>'; 
      echo '<td> Date </td>'; 
      echo '<td> Time </td>'; 
      echo '</tr></thead>'; 
     }  
     $project_total += $item['time']; 
     $total += $item['time']; 
     echo '<tr>'; 
     echo '<td>' . $item['title'] . '</td>'; 
     echo '<td>' . $item['date'] . '</td>'; 
     echo '<td>' . $item['time'] . '</td>'; 
     echo '</tr>'; 
    } 
    ?> 
    <tr class="totalReportTime"> 
     <th colspan="2">Total</th> 
     <th><?php echo $total; ?></th> 
    </tr> 
    </table> 

get_tasks_listはすべてのタスクのリストを示します。

これは、レポートのテーブルがどのように見えるかです: enter image description here

私の疑問は.....私は何をしにやっている: $ PROJECT_ID = $アイテム[ 'PROJECT_ID']; ??

私はforeachループの後にforeachタスクをチェックします。$ project_idが0に設定されているかどうかは、タスクに関連するproject_idと等しくないかどうかを確認します。 $ project_idは0より大きいですか?なぜそれの後に$ project_idの値をtask_idの同じ値としてタスクから設定しているのでしょうか?

基本的に、最後に各プロジェクトの合計を追加する必要があるかどうか、またはその割り当てを行う理由を把握していません。$ project_id = $ item ['project_id'];

基本的な説明が役立ちます。

ありがとうございます!

+0

'$ project_id'は' $ last_project_id'という名前の方が良いと思われます。 2つの重複した '$ item'を連続して出力しないようにしているようです。どのような、btw、最初の場所で汚れたデータのようなにおい... – moopet

+0

申し訳ありません...私はそれをキャッチしない:(だから$ project_idは、プロジェクトの最後のタスクのIDですか? データはゴミですが、チュートリアルではさまざまな種類のデータとその検証について教えています。 これはとてもイライラしています!!!!! 回答ありがとうございました:) –

答えて

1

コード部分を読み、各コードの重要性を理解できるように各コード部分にコメントを追加しましたが、まだ質問がありましたら教えてください。ループは再び自己それを反復しないだろうとPROJECT_ID変化なし比較は、それがするので、そこになりますので、あなたがその最後のタスクを見ることができるので、最後のプロジェクトは、総

そのを持っていない

<?php 
$filter = 'all'; 
?> 
<table> 
    <?php 

    // variable declaration 
    $total = $project_id = $project_total = 0; 

    // fetaching all the tasks 
    foreach (get_tasks_list($filter) as $item) { 

     // $item['project_id'] --> it has the project_id shows this task belongs to this project 
     // this condition checks that current project_id and task's project id is matched or not 
     // at first time $project_id will be zero so this will be true at first time 
     // and next time when it will be set to another project id again this will be executed. 
     // so in short this condition has 2 purpose 
     // 1. show project total 
     // 2. show project title 
     // it will done once project is changed.     
     if ($project_id != $item['project_id']) { 

      // at very first time we will not show total for first project 
      // so we are comparing it will 0 
      if ($project_id > 0) { 

       // print total 
       echo '<tr>'; 
       echo '<th colspan="2">Project Total</th>'; 
       echo '<th>' . $project_total . '</th>'; 
       echo '</tr>'; 

       // once total is printed we need to reset it for another project 
       $project_total = 0; 
      } 

      // this is needed for printing header only once for each tasks. 
      // as if ($project_id != $item['project_id']) 
      // this condition only pass when project is changed. 
      // so it will print total and then header of project 
      // then we will assign $project_id = $item['project_id'] as we need to tell loop 
      // current project id is changed or not from previous iteration if its changed then 
      // again print total and header with this condition check if ($project_id != $item['project_id']) 
      $project_id = $item['project_id']; 
      echo '<thead>'; 
      echo '<tr>'; 
      echo '<td>' . $item['project'] . '</td>'; 
      echo '<td> Date </td>'; 
      echo '<td> Time </td>'; 
      echo '</tr></thead>'; 
     }  

     // this will be total for each task and you can see 
     // it is cleared in upper condition when project is changed 
     $project_total += $item['time']; 

     // this is grand total it will add all the time for all the task and not going to reset 
     $total += $item['time']; 

     // this will print each task 
     echo '<tr>'; 
     echo '<td>' . $item['title'] . '</td>'; 
     echo '<td>' . $item['date'] . '</td>'; 
     echo '<td>' . $item['time'] . '</td>'; 
     echo '</tr>'; 
    } 
    ?> 


    <tr class="totalReportTime"> 
     <th colspan="2">Total</th> 
     <th><?php 
      // at last row we are printing main total 
      echo $total; 
     ?></th> 
    </tr> 
</table> 

その状態には行かないので、最後のプロジェクトを印刷することはできません。

+0

!!!時間をとっていただきありがとうございます:) –

+1

大歓迎:)いつでも –

関連する問題