记录多于一条时,记录将显示两次

时间:2019-01-19 07:35:25

标签: php database codeigniter codeigniter-3

我正在使用CodeIgniter,正在显示数据库中的数据。

我正在视图上显示数据(预期输出)

第1行

AFGFD ANAND
trdsd@gmail.com

ActivityName   | Activity_startTime | Activity_endTime
cricket        | 05:00.             | 08:00

第2行

POIUY ANAND
mnbsd@gmail.com

ActivityName   | Activity_startTime | Activity_endTime
cricket        | 05:00.             | 08:00
Badminton      | 09:00.             | 11:00

问题是,第一行显示得很完美,因为我只有一个活动,但是第二行却获得了多个记录。

我正在获得第二行的输出,例如

POIUY ANAND
mnbsd@gmail.com

POIUY ANAND
mnbsd@gmail.com

ActivityName   | Activity_startTime | Activity_endTime
cricket        | 05:00.             | 08:00
ActivityName   | Activity_startTime | Activity_endTime
Badminton      | 09:00.             | 11:00

如何分别显示个人信息和活动信息?

我知道我使用了2 foreach,这就是我得到输出的原因。我想我可以通过更改模型查询来显示个人信息和活动信息。

查看代码

foreach ($SActivity as $sec_data) {
    foreach ($sec_data as $row) { ?>
        <h2><?php echo $row->first_name;?><?php echo $row->last_name;?></h2>
        <p><?php echo $row->email;?></p>
        <table>
            <thead>
                <tr>
                    <th>ActivityName</th>
                    <th>Activity_startTime</th>
                    <th>Activity_endTime</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><?php echo $row->ActivityName;?></td>
                    <td><?php echo $row->Activity_startTime;?></td>
                    <td><?php echo $row->Activity_endTime;?></td>
                </tr>
            </tbody>
        </table>
<?php }
} 

我在视图页面中得到输出

Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [member_id] => 209
                    [customer_id] => 20183
                    [profile_pic] => 5bb76975b6c4a1538746741051018.JPG
                    [first_name] => AFGFD
                    [middle_name] => 
                    [last_name] => ANAND
                    [email] => trdsd@gmail.com
                    [dob] => 24-07-1982
                    [phone] => 0987654321
                    [activity_name_id]=>1
                    [activity_name]=>cricket
                    [activity_startTime]=>05:00
                    [activity_endTime]=>08:00
                )
        )

    [1] => Array
        (
            [0] => stdClass Object
                (
                    [member_id] => 337
                    [customer_id] => 20184
                    [profile_pic] => 5bc7363f4fadf1539782207171018.jpg
                    [first_name] => POIUY
                    [middle_name] => 
                    [last_name] => ANAND
                    [email] => mnbsd@gmail.com
                    [dob] => 17-04-2006
                    [phone] => 0987654314
                    [activity_name_id]=>1
                    [activity_name]=>cricket
                    [activity_startTime]=>05:00
                    [activity_endTime]=>08:00
                )

            [1] => stdClass Object
                (
                    [member_id] => 337
                    [customer_id] => 20184
                    [profile_pic] => 5bc7363f4fadf1539782207171018.jpg
                    [first_name] => POIUY
                    [middle_name] => 
                    [last_name] => ANAND
                    [email] => mnbsd@gmail.com
                    [dob] => 17-04-2006
                    [phone] => 0987654314
                    [activity_name_id]=>2
                    [activity_name]=>Badminton
                    [activity_startTime]=>09:00
                    [activity_endTime]=>11:00
                )

        )

)

控制器

//getting personal information
$getLoginMemberDetails['getAlldata'] = $this->Member_model->getAlldata();

$allData = [];
foreach ($getLoginMemberDetails['getAlldata'] as $m_id) {
    $allData[] = $this->Member_model->getMemberActivity($m_id->member_id);
}

$getLoginMemberDetails['SActivity'] = $allData;

模型

public function getSecondaryMemberActivity($gotMemberId)
{
    $getDetails = ['members.member_id' => $gotMemberId];
    $result = $this->db->where($getDetails)
        ->from('members')
        ->join('member_activity', 'members.member_id = member_activity.member_id','LEFT')
        ->join('activity_name', 'activity_name.activity_name_id = member_activity.activity_id','LEFT')
        ->get()
        ->result();

    if($result) {
        return $result;  
    } else  {
        return 0;    
    }
}

您能在这个问题上帮助我吗?

1 个答案:

答案 0 :(得分:0)

在您的视图中尝试此代码。我只添加了一个计数器来跟踪每个用户的活动数量,并跟踪循环中的当前位置,以便仅打印出每个用户的一个表头和用户信息:

<?php 
foreach ($SActivity as $sec_data) {

    $counter = 0; // COUNTER FOR KNOWING POSITION IN ACTIVITIES LOOP 
    $num_activities = count($sec_data); // TOTAL NUMBER OF ACTIVITIES FOR THIS USER

    foreach ($sec_data as $row) { 
        $counter++; // ADD +1 TO COUNTER FOR EACH ACTIVITY

        // ONLY PRINT OUT THE NAME AND TABLE HEADER IF FIRST ROW 
        if($counter == 1){ ?>

        <h2><?php echo $row->first_name;?><?php echo $row->last_name;?></h2>
        <p><?php echo $row->email;?></p>
        <table>
            <thead>
                <tr>
                    <th>ActivityName</th>
                    <th>Activity_startTime</th>
                    <th>Activity_endTime</th>
                </tr>
            </thead>
            <tbody>

        <?php } ?>      

                <tr>
                    <td><?php echo $row->ActivityName;?></td>
                    <td><?php echo $row->Activity_startTime;?></td>
                    <td><?php echo $row->Activity_endTime;?></td>
                </tr>

        <?php 
        // IF THIS IS THE LAST ACTIVITY OF THIS USER IN THE LOOP: PRINT TABLE END TAG
        if($counter == $num_activities){
            echo '</tbody></table>';
        }
    } 
} 
?>
相关问题