2013-01-05 43 views
0

我已經根據標籤下面的代碼獲取產品:匹配所有凡使用Kohana的ORM值

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 

我想修改我的查詢以便它只返回那些既有tag1也有tag2(在where語句中)的user_products。所以,我想我需要的WHERE後增加以下內容:

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

我將如何做到這一點使用的Kohana的ORM,此刻我有以下但不知道如何整合的次數和不同的方法:

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

回答

1

明白了工作中使用下列內容:

->having_open()->having(DB::expr('COUNT(DISTINCT標籤.標題)'),'=',2)->having_close();

相關問題