вложенный цикл for с оператором if else PHP codeigniter

View image

my controller
public function admin() {
        $data['employee'] = $this->attendance_model->get_attendance();
        // get today's all employee attendance details
        $data['attendance'] = $this->attendance_model->attendance();
        // attendance page
        $data['header'] = "Employee";
        $data['sub_header'] = "Attendance employee";
        $data['main_content'] = 'attendance/admin_list';
        $this->load->view('employeelayout/main',$data);
    }

my model
// get the employee details
    public  function get_attendance () {
        return $this->db->get('employee')->result();
    }
    
    public function attendance() {
        $today = date('Y-m-d');  // get today date
        $this->db->where('A.date',$today)->from('attendance A')
        ->join('employee E','E.employee_id = A.employee_id','LEFT');
        return $this->db->get()->result();
    }
<thead>
                <tr>
                    <th>#</th>             
                    <th>Employee Name</th>
                    <th>Employee Number</th>
                     <th>Today</th>
                    <th>Mark Incoming</th>       
                    <th class="hidden-phone">Status</th>
                </tr>
            </thead>
           
            <tbody>
                <?php $count = 1; ?>
                <?php foreach($employee as $emp) {  ?>
                 
               <tr class="gradeX">
                    <td><?php echo $count ++ ?></td>
                    <td><?php echo $emp->first_name.' '.$emp->last_name ?></td>
                    <td><?php echo $emp->employee_number ?></td>
                    <?php foreach($attendance as $atten) {  ?>
                    
                    <?php if($emp->employee_id == $atten->employee_id) { ?> 
                    <td><?php echo $atten->date ?></td>
                    <td><?php echo $atten->mark_in_time ?></td>
                    <td><?php echo "present" ?></td>
                    <?php } else {  ?>
                    <td></td>
                    <td></td>
                    <td><?php echo "absent" ?></td>
                    <?php } ?>
                    <?php } ?>
               </tr> 
               
                <?php } ?>
            </tbody>

я использовал вложенный foreach, 1-й я отображаю всех сотрудников в первом foreach 2-й я хочу отображать посещаемость сотрудников с присутствующими и отсутствующими в таблице посещаемости. Я сопоставляю employee_id с таблицей сотрудников employee_id, где он отображает всех присутствующих сотрудников и правильно отображает отсутствующих . любая помощь, пожалуйста

Я разместил изображение, вы можете видеть, я отображаю всех сотрудников, я проверяю, если идентификатор сотрудника = идентификатор сотрудника (значит, существует в таблице посещаемости). если существует, отобразите «присутствует», иначе «отсутствует». но это за цикл.


person Rakesh    schedule 29.03.2016    source источник
comment
В чем проблема снова?   -  person usamazf    schedule 29.03.2016
comment
у меня есть таблица сотрудников и таблица ежедневной посещаемости. Я хочу отображать сегодняшнюю посещаемость, например, кто отсутствует и присутствует. вы можете увидеть контроллер и модель. я написал выше. Я хочу отобразить всех сотрудников с сегодняшним отсутствием и присутствием.   -  person Rakesh    schedule 29.03.2016
comment
почему ты использовал 2 функции?   -  person MaThar Beevi    schedule 29.03.2016
comment
это моя модель, получающая значение из 2 таблиц   -  person Rakesh    schedule 29.03.2016
comment
Сначала передайте идентификатор сотрудника в функцию присутствия(). и измените свои запросы с помощью A.employee_id =$employeeid. Затем у вас есть конкретный сотрудник с присутствующими или отсутствующими деталями (только с 1 результатом). затем покажите это   -  person MaThar Beevi    schedule 29.03.2016
comment
мне не нужен конкретный сотрудник. Я хочу, чтобы все сотрудники с отсутствующими и присутствующими. добавляю изображение. пожалуйста, проверь это   -  person Rakesh    schedule 29.03.2016
comment
по вашему совету я получаю только конкретных сотрудников, мне нужны и все, кто отсутствует   -  person Rakesh    schedule 29.03.2016
comment
сам запрос у вас есть правильно принять отсутствующий результат. не переходи во вложенный цикл. Можете ли вы указать имя столбца таблицы.   -  person MaThar Beevi    schedule 29.03.2016
comment
брат, если employee_id существует в обеих таблицах, это означает, что он присутствует, иначе отсутствует. вместо отображения значения я отображаю значение. нет проблем с этим. Я прикрепил изображение, пожалуйста, проверьте   -  person Rakesh    schedule 29.03.2016
comment
мой добрый совет, пожалуйста, избегайте зацикливания. В вашем результате требуется много времени, чтобы показать результат. потому что идентификатор каждого сотрудника проверяет все записи таблицы посещаемости. Если 10000 записей о посещаемости означает, что выполнение вашей страницы занимает много времени.   -  person MaThar Beevi    schedule 30.03.2016


Ответы (2)


SELECT e.*, CASE WHEN (a.attendance_id is null) THEN 'absent' ELSE 'present' END as presentinfo FROM `employee` e left join attendance a on e.employee_id=a.employee_id and a.date=date(now())

Ваша HTML-страница выглядит так:

           <tr class="gradeX">
                <td><?php echo $emp->first_name.' '.$emp->last_name ?></td>
                <td><?php echo $emp->employee_number ?></td>
                <td><?php echo $emp->presentinfo ?></td>
           </tr> 

            <?php } ?>
        </tbody>

Мое предложение: используйте приведенный выше запрос. Он отобразит необходимый результат.

person MaThar Beevi    schedule 29.03.2016

попробуйте следующее

твоя модель

public  function get_attendance () {

    $arrEmployee = $this->db->get('employee')->result();

    $arrEmployeeById = array();
    $arrEmployeeIds = array();
    foreach($arrEmployee AS $objEmployee)
    {
        $objEmployee->arrAttendance = array();
        $arrEmployeeById[$objEmployee->employee_id] = $objEmployee;
        $arrEmployeeIds[] = $objEmployee->employee_id;
    }

    $this->db->where_in("A.employee_id",$arrEmployeeIds);
    $arrAttendances = $this->attendance();

    foreach($arrAttendances AS $objAttendence)
    {
        if (isset($arrEmployeeById[$objAttendence->employee_id]))   $arrEmployeeById[$objAttendence->employee_id]->arrAttendance[] = $objAttendence;
    }

    return $arrEmployee;

    //return $this->db->get('employee')->result();
}

public function attendance() 
{
    $today = date('Y-m-d');  // get today date
    $this->db->where('A.date',$today)->from('attendance A')
    //->join('employee E','E.employee_id = A.employee_id','LEFT');
    return $this->db->get()->result();
}

ваш контроллер

public function admin() {
    $data['employee'] = $this->attendance_model->get_attendance();
    $data['header'] = "Employee";
    $data['sub_header'] = "Attendance employee";
    $data['main_content'] = 'attendance/admin_list';
    $this->load->view('employeelayout/main',$data);
}

//Ваше мнение

<thead>
    <tr>
        <th>#</th>             
        <th>Employee Name</th>
        <th>Employee Number</th>
         <th>Today</th>
        <th>Mark Incoming</th>       
        <th class="hidden-phone">Status</th>
    </tr>
</thead>

<tbody>
    <?php $count = 1; ?>
    <?php foreach($employee as $emp) {  ?>

   <tr class="gradeX">
        <td><?php echo $count ++ ?></td>
        <td><?php echo $emp->first_name.' '.$emp->last_name ?></td>
        <td><?php echo $emp->employee_number ?></td>
        <?php 
        if (count($emp->arrAttendance) > 0)
        {
            foreach($emp->arrAttendance as $atten) {  
        ?>
                <td><?php echo $atten->date ?></td>
                <td><?php echo $atten->mark_in_time ?></td>
                <td><?php echo "present" ?></td>
        <?php
            }
        }
        else 
        {  
        ?>
            <td></td>
            <td></td>
            <td><?php echo "absent" ?></td>
        <?php } ?>
   </tr> 
    <?php } ?>
</tbody>
person sintakonte    schedule 29.03.2016