尝试按产品类别将标签与产品相关联

时间:2014-05-16 18:56:57

标签: php jquery mysql ajax codeigniter

好的,这就是我想要做的。我有一个标记(pid,tag)和一个产品(id, name)。有很多与一种产品相关的标签。

我有标签过滤器选项,我可以在其中选择标签,它会按标签过滤产品。可以查询1个标签或查询10个标签。例如,有包含所有标签的复选框,用户可以根据需要选择任意数量的标签,并且应该过滤那些与这些标签关联的产品。

似乎无法找出最快的方法。

我可以非常快速地获得每个产品标签,但我如何通过标签获得带有标签的每个产品。这就是我所期待的。

被搜索的标签:'Deck Mount,Single,3in'

产品

id,name,array(Deck Mount,Single,3in,Strait,Black,Green,Blue)

select p.* 
from products p 
HAVING p.loc_cat = 'Faucets' 
AND (select pid 
     from tags 
     where pid = p.id 
     AND tag = 'BODY:DECK MOUNT');

这是我正在使用的查询的一个示例。这是两个表。

CREATE TABLE `tags` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `tag` varchar(255) NOT NULL DEFAULT '',
  `pid` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23128 DEFAULT CHARSET=latin1;

CREATE TABLE `products` (
  `prod_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `list` varchar(255) DEFAULT NULL,
  `desc` text,
  `harmonize` varchar(255) DEFAULT NULL,
  `id` varchar(255) DEFAULT '',
  `loc_cat` varchar(255) DEFAULT '',
  `loc_desc` varchar(255) DEFAULT '',
  `pcode` int(100) DEFAULT NULL,
  `pcodedesc` varchar(255) DEFAULT '',
  `pid` varchar(255) DEFAULT NULL,
  `search_string` text,
  `upc` varchar(255) DEFAULT NULL,
  `date__updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`prod_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3908 DEFAULT CHARSET=latin1;

标签列中有许多与一个产品相关的标签。我正在使用ajax搜索一组标签来获取产品ID以获取产品。问题是有很多,所以它需要永远。我想我已经在考虑了。

每次勾选复选框时,我都会运行查询并发送所有选中复选框的逗号分隔字符串。

1 个答案:

答案 0 :(得分:0)

终于把它弄清楚了。这是我现在的询问。

select p.*, 
   (select GROUP_CONCAT(tag) from tags where pid = p.id) as tags 
   from products p 
   HAVING p.loc_cat = 'Pre-rinse Units' 
   AND tags LIKE '%BODY:DECK MOUNT%' AND tags LIKE '%BODY:SINGLE%';