MySQL使用AND运算符在同一列上多个WHERE IN

萨斯瓦里

需要有关MySQL的帮助。

我正在建立网上商店,并且在使用同一列上的多个WHERE IN子句过滤搜索结果时遇到问题。

我有表shopitem过滤器filter_optionshopitem_option

shopitem(带有名称,描述,价格等的项目)

id
title
price

过滤器(主要过滤器类别,例如颜色,品牌,性别,尺寸等)

id
name

filter_option(过滤器选项,例如尺寸(S,M,L),颜色(黑色,白色)等)

id
name
filter_id (filter.id)

shopitem_option(项目和选项之间的连接)

id
shopitem_id (shopitem.id)
filter_id (filter.id)
filter_option_id (filter_option.id)

我有各种尺寸,颜色,性别等各种耐克空气鞋之类的物品。

所以在shopitem_option表中,我有以下内容:

id  |  shopitem_id  |  filter_id  |  filter_option_id
-----------------------------------------------------
1   |  Nike Air     |  Color      |  black
2   |  Nike Air     |  Color      |  white
3   |  Nike Air     |  Size       |  40
4   |  Nike Air     |  Size       |  41
5   |  Nike Air     |  Size       |  42
6   |  Nike Air     |  Gender     |  man

当我创建MySQL查询时,它必须是这样的(在纯SQL查询中,而不是'black','men'等。有filter_option.id字段的ID

SELECT shopitem.*
FROM shopitem
LEFT JOIN shopitem_option.shopitem_id = shopitem.id
WHERE
    shopitem_option.filter_option_id IN (black) AND 
    shopitem_option.filter_option_id IN (41,42) AND 
    shopitem_option.filter_option_id IN (man)

但这是行不通的。如果我仅搜索40号鞋码或仅搜索黑色,则它将返回所有40号鞋码或所有黑色鞋码。但是,如果我结合使用过滤器来搜索颜色为黑色,尺寸为40的项目,则会返回空查询结果。

所以,基本上用户可以搜索鞋WHERE颜色(黑色白色) 大小(4142) 性别(男性)我怎样才能做到这一点?

阿伦·克里什(Arun Krish)

这样使用

SELECT si.*, GROUP_CONCAT(so.filter_option_id) AS filter_options
FROM shopitem si
LEFT JOIN shopitem_option so ON(so.shopitem_id = si.id)
HAVING
FIND_IN_SET('black', filter_options)
AND  FIND_IN_SET('41', filter_options)
AND FIND_IN_SET('man', filter_options)
GROUP BY si.id

要从结果中计算si.id的数量,您可以将其与子查询一起使用

SELECT COUNT(res.id) FROM
  (SELECT si.*, GROUP_CONCAT(so.filter_option_id) AS filter_options
   FROM shopitem si
   LEFT JOIN shopitem_option so ON(so.shopitem_id = si.id)
   HAVING
   FIND_IN_SET('black', filter_options)
   AND  FIND_IN_SET('41', filter_options)
   AND FIND_IN_SET('man', filter_options)
   GROUP BY si.id) 
 AS res

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在同一列上搜索多个条件?

按同一列上的多个值过滤

在MySQL的同一列上应用AND条件

MYSQL-同一列上的多个和条件不同的值

用两个不同条件的mysql在同一列上求和

在mysql中使用where子句的同一列上的多个连接不起作用

groupby之后在同一列上应用多个操作

如何在SQL的同一列上创建多个条件

MySQL将在同一列上使用两个WHERE-X-IN-Y子句优化查询吗?

在MySQL的同一列上使用sum,count

同一列上的多个where子句具有多对多关系

MySQL IN运算符来自另一列的结果

如何在理论中的同一列上实现对多个表的联接

在同一列上两次使用WHERE子句?

MySQL在同一表的同一列上使用AND条件选择查询

在同一列上具有多个条件的 MySQL 查询

在同一列上使用多个 OR 和 AND 进行选择

编写一个严格满足同一列上的多个条件的选择查询

如何在同一列上找到具有多个不同值的结果?

同一列上是否有多个外键约束“ORed”或“ANDed”

如何在同一列上使用标量运算?

为什么我的 MySQL 复合索引的基数比同一列上的单个索引少?

在同一个数组字段上应用多个更新运算符

Numpy.where 在同一列上导致空数据框

SELECT 匹配条件值以及同一列上多个条件 WHERE 子句的结果

MYSQL使用多个where子句更新同一列

mysql 同一列上的多個條件

Sumproduct 在同一列上具有多个条件不起作用

将 $in 运算符与上一列的结果一起传递