Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算和过滤镶嵌面类型(EAV)过滤器中的产品/实体_Php_Mysql_Entity Attribute Value - Fatal编程技术网

Php 计算和过滤镶嵌面类型(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

在这个主题模型中,我正在基于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中选择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以及所需的结果。简单的例子,足够理解了