PHP SQL通过复杂的复选框过滤器获取值

时间:2020-07-07 19:50:34

标签: php sql ajax

我有3张桌子

  1. 产品
  2. product_feature
  3. 功能

在第一个中,我拥有我的产品,第二个中,我具有产品的ID,并且具有功能的ID,第三个中,我具有的功能可以具有不同的颜色,尺寸,材质...

我建立了一个具有蓝色,红色,白色,黑色... XL LM S ...大小的筛选器菜单,当用户选择它时,脚本会发送一个AJAX请求以显示产品...表单输入为复选框类型...

问题在于,我每次用户选择某些内容时都会发送一个对象

示例

object = {
"color": [13215, 23154, 21658,...],
"size": [5123, 6574, 9875,...]
}

数组填充有id_features 当我print_r file.php上的数据时,它确实显示了我想要的东西。

所以我的问题出在SQL查询上,我有类似的东西

$features = implode("','", $ajaxArray['feature']); //ajaxArray is the object sent by JS
$query = "SELECT id_product FROM product_feature WHERE id_feature IN ('$features')";

因此,如果我在过滤器中选择了例如“红色”和“ XL”,它会向我显示具有“红色”功能或“ XL”功能的所有产品,而我想要的只是具有“红色”和“ XL”功能...如果某件产品有红色但没有XL,我不希望它们显示!!!

1 个答案:

答案 0 :(得分:0)

您要Mysql做的是

SELECT id_product FROM product_feature WHERE id_feature IN ('XL', 'red')

所以,它确实在执行您要执行的操作,“ IN”子句是隐式的“ OR”

您需要一个更复杂的查询,有几种方法可以执行此操作,但这是一种问答方式

$sql = "SELECT id_product FROM product_feature 
  WHERE id_feature IN ('$features')
  group by id_product having count() = " . sizeof( $ajaxArray['feature'] );
相关问题