使用CI中的where语句防止重复结果

时间:2014-01-09 19:55:46

标签: php mysql sql codeigniter

我的where in sql语句存在问题。我首先展示我的桌子然后解释我想要做什么以及为什么我会遇到这个问题。

Table1

id primary key
title


Table2

id primary key
vid foreign key


Table3

vid primary key
vegetable 

以上是我的表格,而我的CodeIgniter SQL

$this->db->select('*');
$this->db->from('Table1');
$this->db->join('Table2', 'Table2.id = Table1.id');
$this->db->join('Table3', 'Table3.vid = Table2.vid');
$this->db->where_in('vegetable', $veg);
$query = $this->db->get();
$result = $query->result();

结果将返回给我的控制器并发送到我的视图,其输出如下:

if (isset($results)){
            foreach($results as $row){
                $id = $row->id;
                echo $row->title;
            }
}

正如您所看到的,我正试图通过一些联接从title获取Table1并使用vegetable列进行搜索。所以我遇到的问题是如果在Table2id包含2 vid并且两者都在$veg数组中,则会导致结果重复,因为该项目会出现两次,即使它是相同的id。所以我的问题是如何防止它重复?

实施例: $veg将是一个数组,因此对于示例,我们可以说它具有以下值potatoecabbagelettuce,并且第三个表中的每个值都具有以下值值分别为123。现在我遇到的问题是,如果我在vid上重复id,我会多次显示title,所以说id1这个vid 12 title会重复两次,因为它会被发现两次。

2 个答案:

答案 0 :(得分:2)

尝试在您的有效记录查询中添加$this->db->distinct();

$this->db->select('*');
$this->db->from('Table1');
$this->db->join('Table2', 'Table2.id = Table1.id');
$this->db->join('Table3', 'Table3.vid = Table2.vid');
$this->db->where_in('vegetable', $veg);
$this->db->distinct();
$query = $this->db->get();
$result = $query->result();

来自Active Record手册的示例

$this->db->distinct();
$this->db->get('table');

// Produces: SELECT DISTINCT * FROM table

See Active Reocord Reference

答案 1 :(得分:0)

if (isset($results)){
            $results = array_unique($results);
            foreach($results as $row){
                $id = $row->id;
                echo $row->title;
            }
}

PHP: array_unique - Manual php函数从数组中删除重复项。