[英]Join two tables with where clause using CodeIginter
我正在尝试从表“ main_tests”中加载所有数据,其中main_tests.id = test_name_price.test_id
和test_name_price.list_id = 1
我正在尝试这样做,但是它只是在说错误的语法,我是CodeIginter的初学者。
我一直在寻找答案,但我无法准确获得所需的东西,或者他们的方式对我不起作用
这是我的代码
$result = $this->db->select('test_name_price.*, main_tests.*')
->from('test_name_price')
->where('test_name_price.list_id', 1)
->join('main_tests',
'test_name_price.test_id = main_tests.id')
->get();
if (count($result) > 0) {
foreach ($result as $itemsl) {
echo "
<option value='$itemsl->testname' data-code='$itemsl-
>test_code'>$itemsl->test_id</option>
";
}
}
echo "</select>"
编辑:
这是我控制器中的代码,该视图是addpatient
public function addpatient()
{
$this->load->model("khmodel","Khmodel");
$this->load->view('addpatient', array('result_array' =>
$result_array));
}
这是我的看法
<?php foreach ($result_array as $key => $value) : ?>
<option value='<?= $value['testno'] ?>' data-code='<?=
$value['testno'] ?>'><?= $value['test'] ?></option>
<?php endforeach; ?>
这是我用来加载视图的MasterPage函数,告诉我是否需要添加其他内容
public function MasterPage($view='',$table='',$da='',$spg='',$szpg='')
{
if (!empty($table)) {
$data['result']=$this->Khmodel->get($table,$da,$spg,$szpg,"id
desc");
$data['pages']=$this->Khmodel->pagesno($table,$szpg);
}
$data['sview']=$view;
$data['index']=($view == 'home') ? '' : 'iner_page';
$getlang =$this->uri->segment(1);//$this->input->cookie('shlang', TRUE);
if($getlang=='en'){
$this->lang->load('en', 'en');
$data['lang']='en';
$data['nav_align']='right';
$data['xnav_align']='left';
}
else{
$this->lang->load('ar', 'ar');
$data['lang']='ar';
$data['nav_align']='left';
$data['xnav_align']='right';
}
//$this->load->view('main/close');
$this->load->view('main/header',$data);
if($view!='home'){
$this->load->view('main/top_header',$data);
}
$this->load->view('main/'.$view);
$this->load->view('main/footer',$data);
}
好吧,这对我来说就像是魅力!
我已经使用@Sherif Salah代码的第一部分,在没有控制器或模型的视图内部,它实际上有效!
谢谢你的帮助
$table_one = 'test_name_price';
$table_two = 'main_tests';
$this->db->select("$table_one.*,$table_two.*");
$this->db->join($table_two, "$table_two.id =
$table_one.test_id", 'left');
$this->db->from($table_one);
$this->db->where("$table_one.list_id =
1");
$query = $this->db->get();
$result_object = $query->result();
if (count($result_object) > 0) {
foreach ($result_object as $itemsl) {
echo "<option value='$itemsl->tsprice' data-code='$itemsl-
>testno'>$itemsl->test</option>";
}
}
这是在Codeigniter中联接表的方法,但是请确保现在有相似的字段名称,或者您必须单独选择它并手动重命名该字段。
$table_one = 'table_one_name';
$table_two = 'table_two_name';
$this->db->select("
$table_one.*,
$table_two.*
");
$this->db->join($table_two, "$table_two.id = $table_one.table_two_id", 'left');
$this->db->from($table_one);
$query = $this->db->get();
$result_object = $query->result();
$result_array = $query->result_array();
注意:如果上面的代码正确,则必须以$result->result()
作为对象或$result->result_array()
作为数组来获取结果。
编辑:这是一个有关如何在视图中使用此数组的快速示例,上面的代码将返回数组的数组,您可以按以下方式处理此数组:
<?php foreach ($result_array as $key => value) : ?>
<option value='<?= $value['name'] ?>' data-code='<?= $value['code'] ?>'><?= $value['id'] ?></option>
<?php endforeach; ?>
注意:请保持逻辑在您的控制器中,只需将结果传递给视图即可。
编辑:现在让它保持简单,假设您的查询工作正常,并且您可以通过var_dump($result)
进行检查,所以现在您需要将此数据传递给视图,但是您想这样做,但是假设再次得到了result
控制器,并且一切正常,现在您只需要将它传递给这样的视图:
$data = array("result" => $result);
$this->load->view('your_view', $data);
在您看来,只需使用变量result
或您命名的任何内容就可以遍历此数组。
恕我直言 ..您应该阅读codeigniter的文档,并按照codeigniter中的任何分步教程进行操作,原因是您的问题不是您不知道如何联接两个表,而是有关如何使用框架本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.