我的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
列进行搜索。所以我遇到的问题是如果在Table2
中id
包含2 vid
并且两者都在$veg
数组中,则会导致结果重复,因为该项目会出现两次,即使它是相同的id
。所以我的问题是如何防止它重复?
实施例:
$veg
将是一个数组,因此对于示例,我们可以说它具有以下值potatoe
,cabbage
和lettuce
,并且第三个表中的每个值都具有以下值值分别为1
,2
,3
。现在我遇到的问题是,如果我在vid
上重复id
,我会多次显示title
,所以说id
是1
这个vid
1
和2
title
会重复两次,因为它会被发现两次。
答案 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
答案 1 :(得分:0)
if (isset($results)){
$results = array_unique($results);
foreach($results as $row){
$id = $row->id;
echo $row->title;
}
}
PHP: array_unique - Manual php函数从数组中删除重复项。