Код: Выделить всё
shopsКод: Выделить всё
+--+-------+--------+
|id|name |date |
+--+-------+--------+
|1 |x |March 10|
+--+-------+--------+
|2 |y |March 10|
+--+-------+--------+
< /code>
Таблица категорий магазинов (shop_catsКод: Выделить всё
+--+-------+--------+
|id|shop_id|cat_id |
+--+-------+--------+
|1 |1 |1 |
+--+-------+--------+
|2 |1 |2 |
+--+-------+--------+
< /code>
Я хочу получить магазины по категории (категории передаются через массив $ cat). < /p>
$this->db->select('shops.*');
$this->db->from('shops');
if (!empty($cat)) {
$this->db->join('shop_cats' , 'shop_cats.shop_id = shops.id' );
$this->db->where_in('shop_cats.cat_id', $cat);
}
$this->db->limit($limit, $offset);
$res = $this->db->get();
< /code>
Моя проблема в том, что он возвращает дубликаты результатов. < /p>
Например, в этой таблице < /p>
+--+-------+--------+
|id|shop_id|cat_id |
+--+-------+--------+
|1 |1 |1 |
+--+-------+--------+
|2 |1 |2 |
+--+-------+--------+
< /code>
Если я хочу магазины с категорией 1 или 2, я получаю магазин с id = 1 дважды.
Я хочу, чтобы он вернул каждый магазин только один раз без каких -либо дубликатов. < /p>
Я пытался использовать группу по < /p>
if (!empty($cat)) {
$this->db->join('shop_cats' , 'shop_cats.shop_id = shops.id');
$this->db->group_by('shop_cats.shop_id');
$this->db->where_in('shop_cats.cat_id' , $cat);
}
< /code>
Это не сработало. Я также пробовал: < /p>
if (!empty($cat)) {
$this->db->select('DISTINCT shop_cats.shop_id');
$this->db->join('shop_cats', 'shop_cats.shop_id = shops.id');
$this->db->where_in('shop_cats.cat_id' , $cat);
}
Подробнее здесь: https://stackoverflow.com/questions/141 ... many-relat