1

ショップテーブル:

   +--+-------+--------+
    |id|name   |date    |
    +--+-------+--------+
    |1 |x      |March 10|
    +--+-------+--------+
    |2 |y      |March 10|
    +--+-------+--------+

カテゴリー表:

+--+-------+
|id|title  |
+--+-------+
|1 |tools  |
+--+-------+
|2 |foods  |
+--+-------+

ショップ カテゴリ テーブル (shop_cats):

+--+-------+--------+
|id|shop_id|cat_id  |
+--+-------+--------+
|1 |1      |1       |
+--+-------+--------+
|2 |1      |2       |
+--+-------+--------+

カテゴリ別にショップを取得したい (カテゴリは $cat 配列に格納されています)

     $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();

私の問題は、たとえばこのテーブルで重複した結果を返すことです

+--+-------+--------+
|id|shop_id|cat_id  |
+--+-------+--------+
|1 |1      |1       |
+--+-------+--------+
|2 |1      |2       |
+--+-------+--------+

(1,2) カテゴリのショップが必要な場合は、id = 1 のショップを 2 回取得します。重複せずに各ショップに1回だけ返却してほしい。

group by を使用しようとしました

 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);
         }

それはうまくいきませんでした、私も試しました

 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);
         }

しかし、構文エラーが発生します!

4

1 に答える 1

1

試す

$this->db->distinct('shops.*');
$this->db->from('shops');
$this->db->join('shop_cats', 'shop_cats.shop_id = shops.id', 'left');
$this->db->where('shop_cats.cat_id', $cat);
$this->db->limit($limit , $offset);
$res = $this->db->get();
于 2013-01-01T12:17:21.387 に答える