好的,这就是我正在尝试做的事情。我有一个标签列(pid,tag)
和一个产品列(id, name)
。有大量与一种产品相关的标签。
我有一个标签过滤器选项,我可以在其中选择标签,它将按标签过滤产品。可以查询 1 个标签,也可以查询 10 个标签。例如,有包含所有标签的复选框,用户可以选择任意数量的标签,并且它应该过滤具有这些标签关联的产品。
似乎无法找出最快的方法来做到这一点。
我可以很快地获取每个产品标签,但是如何通过标签获取每个产品的标签。这就是我所期待的。
正在搜索的标签:“甲板安装,单,3英寸”
产品
id,名称,阵列(甲板安装,单,3英寸,海峡,黑色,绿色,蓝色)
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 来获取产品。问题是有太多,所以需要很长时间。我想我想多了。
每次选中复选框时,我都会运行查询并发送所有选定复选框的逗号分隔字符串。
最佳答案
终于明白了各位。这是我现在的查询。
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%';
关于php - 尝试按产品类别将标签与产品相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23702733/