【问题标题】:How do you display data in a table using two join tables in Codeigniter [closed]如何使用 Codeigniter 中的两个连接表在表中显示数据 [关闭]
【发布时间】:2019-02-11 12:20:37
【问题描述】:

如何使用 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 名的父母名字和姓氏。并且父字段显示不正确

【问题讨论】:

  • 您是否遇到任何错误?你能澄清一下“它不能正常工作”是什么意思吗?
  • 我刚刚在问题中添加了输出。问题是我得到了错误的输出。
  • 请在Codeigniter中使用join查询,参考一下,尤其是JOin方法
  • 能否请您参考 Codeigniter 文档,它将正确解释您
  • 我在函数中是否以错误的方式使用它?

标签: php sql codeigniter join html-table


【解决方案1】:

不知道为什么要将数据分成 2 个不同的数组和循环,您已经在两个表中使用 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
}
?>

您已经在此处从查询中获取所有信息:

$data["student_data"]  =  $student_data;

因此,当您在查询中使用 JOIN 时,无需运行两次查询。这是不必要的:

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

代码中的问题/解释:

Ist foreach() 使用 &lt;tr&gt;,它将重复直到 foreach 结束。但是第二个foreach() 使用&lt;td&gt;,它将重复直到foreach 结束,这将增加&lt;td&gt; 而不是&lt;tr&gt;。

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

旁注:您需要使用CI join method,而不是原始查询。类似:

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

【讨论】:

  • 因为我想在最后一列(父母)而不是学生中获得“父母名字和父母姓氏”
  • 1个循环就可以实现,不用重复两次
  • 谢谢。我会用它来连接。如果我使用 if(isset($parent_data->f_name) ... 是否正确,因为我想要父数据。
  • 哦,谢谢你,我明白了:D
  • 非常感谢,这真的很有帮助:)
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 2021-04-05
  • 2017-03-12
  • 2013-06-29
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多