Take a look at this: https://github.com/CakeDC/search  It'll do this for you 
very nicely.


Jeremy Burns
Class Outfit

http://www.classoutfit.com

On 2 Jan 2012, at 18:10:23, Dwayne Hanekamp wrote:

> Hello all,
> 
> I've been struggling on this for the last two days. I'm creating a
> webshop on which people should be able to filter products on multiple
> tags. Database structure is the following:
> 
> Tags => Id | Name
> Products => Id | Category_id | Name | etc...
> Tags_Products | Id | Product_id | Tag_id
> Categories | Id | parent_id | name
> 
> The user can first select a category and each category has
> subcategories which  have products which have their tags. So after
> they've selected a category or subcategory they can filter down using
> the tags of the products in the categories.
> 
> For the find query i made next options array:
> Array ( [fields] => Array ( [0] => DISTINCT Product.id [1] =>
> Product.* ) [conditions] => Array ( [OR] => Array
> ( [Product.Category_id] => 1 [Category.parent_id] => 1 ) [AND] =>
> Array ( [AND] => Array ( [FilterTag.name] => Array ( [0] => smartphone
> [1] => apple ) ) ) ) )
> 
> The 'FilterTag' is a fake model made in the function beneath:
> 'hasOne' => array(
>                               'ProductsTag',
>                               'FilterTag' => array(
>                                       'className' => 'Tag',
>                                       'foreignKey' => false,
>                                       'conditions' => array('FilterTag.id = 
> ProductsTag.tag_id'),
>                                       'unique' => true,
> )
> 
> Now the problem is that i want it to find products that have both tags
> in stead of one of the tags. It currently does the next query:
> 
> SELECT DISTINCT `Product`.`id`, `Product`.*, `Product`.`id` FROM
> `products` AS `Product` LEFT JOIN `categories` AS `Category` ON
> (`Product`.`category_id` = `Category`.`id`) LEFT JOIN `products_tags`
> AS `ProductsTag` ON (`ProductsTag`.`product_id` = `Product`.`id`) LEFT
> JOIN `tags` AS `FilterTag` ON (`FilterTag`.`id` =
> `ProductsTag`.`tag_id`) WHERE ((`Product`.`Category_id` = '1') OR
> (`Category`.`parent_id` = 1)) AND `FilterTag`.`name` IN ('smartphone',
> 'apple')
> 
> So it looks for products which have one of the tags. But i want it to
> search for products that have both of the tags.
> 
> I hope you guys can help me, Thanks in advance!
> 
> Dwayne
> 
> -- 
> Our newest site for the community: CakePHP Video Tutorials 
> http://tv.cakephp.org 
> Check out the new CakePHP Questions site http://ask.cakephp.org and help 
> others with their CakePHP related questions.
> 
> 
> To unsubscribe from this group, send email to
> cake-php+unsubscr...@googlegroups.com For more options, visit this group at 
> http://groups.google.com/group/cake-php

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
cake-php+unsubscr...@googlegroups.com For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to