Php 如何使用Codeigniter中的两个联接表在表中显示数据

Php 如何使用Codeigniter中的两个联接表在表中显示数据,php,sql,codeigniter,join,html-table,Php,Sql,Codeigniter,Join,Html Table,如何使用codeigniter中的两个联接表在表中显示数据 我想在表视图中同时显示学生表和父表数据。我已经将父id用作两个表的外键 我使用了这个代码,但它不能正常工作 这是我的模型 function fetch_data() { $sql = "SELECT * FROM student As st LEFT JOIN parent As pt ON st.p_id =pt.p_id"; $query = $this->db->query($sql); if

如何使用codeigniter中的两个联接表在表中显示数据

我想在表视图中同时显示学生表和父表数据。我已经将父id用作两个表的外键

我使用了这个代码,但它不能正常工作

这是我的模型

function fetch_data()
{
    $sql = "SELECT * FROM student As st LEFT JOIN parent As pt ON st.p_id =pt.p_id";

    $query = $this->db->query($sql);
    if($query->num_rows() > 0) 
    {
        return $query->result();


    }else{
        return false;
    }
}

这是我的控制器

function index()
{
    $this->load->model('Tableview_model');


    $student_data= $this->Tableview_model->fetch_data();
    $data["student_data"]  =  $student_data;

    $parent_data=$this->Tableview_model->fetch_data();
    $data["parent_data"]  =  $parent_data;

    $this->load->view('register_students', $data);


}
这就是观点

    <tbody>
        <?php
        if( !empty($student_data && $parent_data ) ) 
        {
        foreach ($student_data AS $student) {


        ?>
        <tr>
            <td><?php echo $student->student_code; ?></td>
            <td><?php echo $student->f_name; ?> <?php echo $student->l_name; ?></td>
            <td><?php echo $student->tel; ?></td>

            <?php
            }

        ?>
            <td></td>

            <?php
            foreach ($parent_data AS $parent) {
            ?>
            <td><?php echo $parent->f_name; ?> <?php echo $parent->l_name; ?></td>
            <?php
            }

             ?>
        </tr>
        <?php 

            }
        ?>

    </tbody>


但是输出是错误的,我得到了学生f名和l名的家长名字和姓氏。并且父字段没有正确显示

不知道为什么要将数据分成两个不同的数组和循环,您已经在为这两个表使用
JOIN
,您可以实现以下目标:

<?php
foreach ($student_data AS $student) {
?>
<tr>
<td><?php echo $student->student_code; ?></td>
<td><?php echo $student->f_name; ?> <?php echo $student->l_name; ?></td>
<td><?php echo $student->tel; ?></td>
<td><?php echo $student->tel; ?></td>
<?php
if(isset($student->f_name) && isset($student->l_name)){ // using isset() because of LEFT JOIN
?>
<td><?php echo $student->f_name; ?> <?php echo $student->l_name; ?></td>
<?php
}
?>
因此,在查询中使用
JOIN
时,无需运行查询两次。这是不必要的:

$parent_data=$this->Tableview_model->fetch_data();
$data["parent_data"]  =  $parent_data;
代码/说明中的问题:

Ist
foreach()
使用
,它将重复执行,直到
foreach
结束。但是第二个
foreach()
使用
,它将重复,直到
foreach
结束,这将增加
而不是

我简单地说,您是在重复列而不是行,如果您立即使用循环,这个问题将得到解决

旁注:您需要使用。比如:

// using last param as 'left' for LEFT JOIN.
$this->db->join('parent pt', 'st.p_id = pt.p_id', 'left'); 

你有什么错误吗?你能澄清一下“它不能正常工作”是什么意思吗?我只是在问题中添加了输出。问题是我得到了一个错误的输出。请在Codeigniter中使用连接查询,参考它,尤其是连接方法扫描您请参考Codeigniter文档,这将正确解释我在函数中是否以错误的方式使用了它?因为我想在最后一列(父)中获取“父姓和父姓”不是学生你可以通过使用1个循环来实现,不需要使用twice谢谢。我会用它来连接。如果我使用if(isset($parent\u data->f\u name)…是否正确,因为我需要父数据。哦,谢谢你,现在我明白了:谢谢你,这真的很有帮助:)
// using last param as 'left' for LEFT JOIN.
$this->db->join('parent pt', 'st.p_id = pt.p_id', 'left');