Php 计算和过滤镶嵌面类型(EAV)过滤器中的产品/实体
在这个主题模型中,我正在基于EAV实体-模型-价值(称为产品-选项-价值)为在线商店构建分面过滤器。 使用以下逻辑筛选产品:Php 计算和过滤镶嵌面类型(EAV)过滤器中的产品/实体,php,mysql,entity-attribute-value,Php,Mysql,Entity Attribute Value,在这个主题模型中,我正在基于EAV实体-模型-价值(称为产品-选项-价值)为在线商店构建分面过滤器。 使用以下逻辑筛选产品: ... pv.value_id IN (option_value1 or option_value1) AND pv.value_id IN (option_value2 or option_value2) 在这样实现的查询中,没有在\u集中查找\u,但提供了许多查询: $pids=数组; foreach$选项作为$值{ $sqli=从product_到_value
... pv.value_id IN (option_value1 or option_value1) AND pv.value_id IN (option_value2 or option_value2)
在这样实现的查询中,没有在\u集中查找\u,但提供了许多查询:
$pids=数组;
foreach$选项作为$值{
$sqli=从product_到_value中选择product_id,其中value_id位于“.内爆,,$values.”;
$query=$db->query$sqli
foreach$query->rows as$row{
$pids[]=$row['product_id'];
}}
$sql.=和中的p.product\u id。内爆,,$pids
另一项任务是计算产品数量的解决方案考虑相关性的选项值,例如下面的查询选择所有可能的产品,给定现有筛选,10-是选项1的值,6,8-是选项2的值
选择p.product\u id、pv.value\u id、GROUP\u CONCATpv.value\u id作为
值\u ID从产品p内部连接产品\u到产品上的\u值pv
p、 product_id=pv.product_id,其中pv.value_id0分组依据
产品id在集合10中具有查找id,值id>0和
查找集合6中的\u,值\u id>0或查找集合8中的\u,值\u id>0
然后,获取所选产品的值计数
问:这看起来不是完美的解决方案,有没有关于如何改进计数/过滤产品代码的想法。使用或注意在集合中查找
和SQL模式,以便更好地理解:
CREATE TABLE `option` (
`option_id` int(10) NOT NULL auto_increment,
`status` int(1) default '0',
`sort_order` int(10) default '0',
PRIMARY KEY (`option_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `option_value` (
`value_id` int(10) NOT NULL auto_increment,
`name` varchar(127) NOT NULL,
`option_id` int(10) default '0',
PRIMARY KEY (`value_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `product_to_value` (
`product_id` int(11) NOT NULL,
`value_id` int(11) NOT NULL,
`option_id` int(11) NOT NULL,
PRIMARY KEY (`product_id`,`value_id`,`option_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `product` (
`product_id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
更新:
在集合中找不到的传统变体
从product_中选择product_id,然后在选择中选择product_id所在的值
product_id从product_到值,其中值_id位于6,8 GROUP BY中
从中选择产品id中的产品id和产品id
product_to_value,其中value_id在10组中按product_id分组
产品标识
哪种变体更好或不同的解决方案?考虑提供一个相同的SQLFIDLE以及所需的结果。简单的例子,足够理解了