Php 如何使用Codeigniter中的两个联接表在表中显示数据
如何使用codeigniter中的两个联接表在表中显示数据 我想在表视图中同时显示学生表和父表数据。我已经将父id用作两个表的外键 我使用了这个代码,但它不能正常工作 这是我的模型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
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;
代码/说明中的问题:
Istforeach()
使用
,它将重复执行,直到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');