从两个表中选择SQL会返回重复值 - Codeigniter

时间:2015-11-23 02:50:31

标签: php mysql sql codeigniter

我必须从两个表中检索一些所有数据。没有条件。但我的代码返回重复的数据值。 每个表包含4行

中心tbl:

centres_tbl

培训课程:

tbl_training_course

输出:

View output Screenshot

我的控制器代码:

    $this->load->model("admindata"); 
    $data ['query'] = $this->admindata->getcentrelist(); 

    $this->load->helper('url');
    $this->load->view('admin/header');
    $this->load->view('admin/training',$data);
    $this->load->view('admin/footer');

我对模型的查询是:

public function getcentrelist()
{
    $this->load->database();
    $query=  $this->db->query('SELECT centre_name,course_name from tbl_training_courses, tbl_traning_centres'); 
    return $query->result();
}

查看:(training.php)

<?php foreach($query as $row): ?>
        <tr>
            <td><?php echo $row->centre_name; ?></td>             
        </tr>
       <?php endforeach; ?>

3 个答案:

答案 0 :(得分:2)

这是正常的,因为你做了隐式连接!为什么不简单地请求两个查询,每个表一个,然后将结果合并到一个数组中?

public function getcentrelist()
{
    $this->load->database();
    $query_courses=  $this->db->query('SELECT course_name as name from tbl_training_courses');  
    $query_centers=  $this->db->query('SELECT centre_name as name from tbl_traning_centres'); 
    $courses = $query_courses->result();
    $centers = $query_centers->result();
    return array_merge($courses,$centers);
}

请注意,我已将字段course_name和中心名称重命名为统一名称:“name”,这是一个连贯的合并表所必需的。

答案 1 :(得分:1)

使用 DISTINCT

public function getcentrelist()
{
    $this->load->database();
    $query=  $this->db->query('SELECT DISTINCT centre_name,course_name from tbl_training_courses, tbl_traning_centres GROUP BY center_name'); 
    return $query->result();
}

或使用 Group By

public function getcentrelist()
{
    $this->load->database();
    $query=  $this->db->query('SELECT centre_name,course_name from tbl_training_courses, tbl_traning_centres GROUP BY center_name'); 
    return $query->result();
}

答案 2 :(得分:0)

您的查询返回的数据是正常的,因为您选择一行并且您获取第二个表的所有行,所以如果您在第二行中有10行,您将获得每个值10次,如果您甚至放不同,您将得到一个问题。要避免这样的问题,您需要在两个表之间使用条件或连接。