0

これは私が作成しているよりも単純かもしれませんが、私は php/mySQL にかなり慣れていないため、少し障害にぶつかっています。

2 つのテーブルのデータがあります

1-雇用者には一般的な連絡先情報があります

2-義務には、雇用主が責任を負う仕事があります

各雇用主には多くの義務があるため、これは一対多の関係です。各雇用者を個別に表示しているときに義務のリストを表示する方法を知っていますが、このアプリケーションでは、同じページにリストされているすべての会社とともに、会社情報の後に各雇用者が持つ義務を含む雇用者のリストを表示する必要があります。

私が現在持っている方法では、

  • 毎回複製された雇用主とのすべての義務について。

    コントローラー

    // Display employment
    
        try
        {
          $result = $pdo->query('SELECT d.*, m.*,
          date_format(start_date,"%M, %Y") AS started,
          date_format(end_date,"%M, %Y") AS ended FROM employers m
          LEFT JOIN duties d ON d.e_id = m.id');
        }
    
        catch (PDOException $e)
        {
          $error = 'Error fetching employers from the database!' . $e->getMessage();
          include '/error.html.php';
          exit();
        }
    
        foreach ($result as $row)
        {
          $employers[] = array(
          'id' => $row['id'],
          'name' => $row['name'],
          'city' => $row['city'],
          'state' => $row['state'],
          'started' => $row['started'],
          'ended' => $row['ended'],
          'title' => $row['title'],
          'duty' => $row['duty']
          );
        }
    

    景色

    <section id="employers">
        <h2>Employers</h2>
        <ul>
            <?php foreach ($employers as $employer): ?>
            <li>
                <?php htmlout($employer['id']); ?>
                <?php htmlout($employer['name']); ?>
                <?php htmlout($employer['city']); ?>
                <?php htmlout($employer['state']); ?>
                <?php htmlout($employer['duty']); ?>
           </li>
           <?php endforeach; ?>
        </ul>
        </section>
    
  • 4

    1 に答える 1

    0

    各従業員のすべての職務をグループ化する場合は、ループを変更する必要があります。ここに例があります

    // Initialize employers
    $employers = array();
    
    // The current employee ID
    $employeeId = false;
    
    // The current new employee
    $newEmployee = false;
    
    // Loop on each line of employee-duty
    foreach ($result as $row)
    {
        // Check if we have to add a new employee
        if ($employeeId == false || $row['id'] != $employeeId)
        {
            // Store previous employee if exists
            if ($newEmployee != false)
                $employers[] = $newEmployee;
    
            // Create new employee
            $newEmployee = array(
                'id' => $row['id'],
                'name' => $row['name'],
                'city' => $row['city'],
                'state' => $row['state'],
                'started' => $row['started'],
                'ended' => $row['ended'],
                'title' => $row['title'],
                'duty' => array()
            );
    
            // Set the new employee ID
            $employeeId = $row['id'];
        }
    
        // In all case, add the duty
        $newEmployee['duty'][] = $row['duty'];
    }
    
    // Save the last employee that will not be saved in the loop
    if ($newEmployee != false)
        $employers[] = $newEmployee;
    

    このコードの最後に、dutyエントリ内のすべての職務を持つすべての従業員 (一意) が含まれます。

    重要: もう 1 つの解決策は、SQL クエリを変更し、group by関数と集計関数を使用して SQL サーバー側で処理を行うことです。これにより、PHP 側のコードが簡素化されます。

    幸運を。

    于 2013-02-26T00:08:10.280 に答える