【问题标题】:PHP SQL get values with complex checkbox filterPHP SQL使用复杂的复选框过滤器获取值
【发布时间】:2020-07-07 19:50:34
【问题描述】:

我有 3 张桌子

  1. 产品
  2. product_feature
  3. 功能

在第一个我有我的产品,第二个我有产品的 id 和功能的 id,第三个我有可以是不同颜色、尺寸、材料的功能......

我建立了一个过滤器菜单,颜色为蓝色、红色、白色、黑色......尺寸 XL L M 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,我不希望他们显示!!!

【问题讨论】:

  • 为了更简单,我想检查 WHERE IN 但在这种情况下,该值必须匹配 ('$features') 字符串中的每个数据。

标签: php sql ajax


【解决方案1】:

你要求Mysql做的是

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

所以,它正在做你要求它做的事情,“IN”子句是一个隐含的“OR”

你需要一个更复杂的查询,有几种方法可以做到,但这里有一个Q&D方式

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

【讨论】:

  • 我最终做了这样的事情,非常感谢队友:)
猜你喜欢
  • 2019-07-22
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2015-12-14
  • 2014-09-05
相关资源
最近更新 更多