你如何使用显示表中的数据两个笨连接表
我想在表视图中显示学生表和父表中的数据。我已经使用了父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
两个表你为什么夹板数据转换成2个不同的阵列和循环,就可以实现你的目标为:
<?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;
在发行代码/说明:
使用qazxsw POI IST qazxsw POI,它会重复,直到qazxsw POI结束。但使用foreach()
第二<tr>
,它会重复,直到foreach
结束,这将增加foreach()
不<td>
。
我简单的话,你在重复列不列,如果你使用你的循环一次,这个问题将得到解决。
边注:代替原始查询的,你需要使用foreach
。就像是:
<td>