0

タグに基づいて製品を取得する次のコードがあります。

self::factory('user_product')
    ->join('items', 'INNER')->on('user_product.item_id', '=', 'items.id')
    ->join('user_tags', 'INNER')->on('items.id', '=', 'user_tags.item_id')
    ->join('tags', 'INNER')->on('user_tags.tag_id', '=', 'tags.id')
    ->where('tags.title', 'IN', $tags)
    ->order_by('items.created_at', 'DESC')->group_by('items.id')->find_all();

これにより、次のSQLが生成されます。

SELECT `user_product`.* FROM `user_products` AS `user_product`
INNER JOIN `items` ON (`user_product`.`item_id` = `items`.`id`) 
INNER JOIN `user_tags` ON (`items`.`id` = `user_tags`.`item_id`)
INNER JOIN `tags` ON (`user_tags`.`tag_id` = `tags`.`id`)
WHERE `tags`.`title` IN ('tag1', 'tag2')
GROUP BY `items`.`id`
ORDER BY `items`.`created_at` DESC

と(where inステートメント内)のuser_products両方を持つクエリのみを返すようにクエリを変更したいと思います。だから私は:の後に以下を追加する必要があると思います:tag1tag2WHERE

HAVING COUNT(DISTINCT `tags`.`title`) = 2

コハナのORMを使用してこれを行うにはどうすればよいですか。現時点では次のようになっていますが、COUNTメソッドとDISTINCTメソッドを統合する方法を理解できません。

->having_open()->having('tags.title','=','2')->having_close();
4

1 に答える 1

1

次を使用して動作しました。

->having_open()->having(DB::expr('COUNT(DISTINCTタグ.タイトル)'),'=',2)->having_close();

于 2013-01-05T22:19:44.547 に答える