mysqli - 我怎样才能做这个mysql查询?如果可能的话
问题描述
我有这张桌子
itemname 属性值 ------------------------------------------ 大号 一种颜色红色 B码大 B 颜色 蓝色 C尺寸小 C色 蓝色 D尺寸小 D 颜色 蓝色 E尺寸小 E色蓝色
我创建了一个这样的列表:SELECT property,value,COUNT(itemname),GROUP_CONCAT(itemname) FROM table GROUP BY property,value
属性值计数 --------------------------------- 大号 2 (A,B) 小号 3 (C,D,E) 红色 1 (A) 蓝色 4 (B,C,D,E)
我想过滤 BIG && SMALL && BLUE 的项目,我怎样才能达到这个结果?(在处理过滤值时,我必须具体说明该属性)
`选择 属性、值、计数(项目名称)、GROUP_CONCAT(项目名称) 从 桌子 通过...分组 适当的价值 拥有 ( 属性 IN ('size') && value IN ('big','small') ) && ( 属性 IN ('color') && value IN ('blue') )`
但这没有结果,因为它试图同时匹配行的大小和颜色?在这种情况下,我想要的输出是避免项目 A,因为它是红色的,如下所示:
属性值计数 --------------------------------- size big 1 (B) A 不在这里,因为它是红色的 size small 3 (C,D,E) 没有变化,因为都是蓝色的 color red 0 (A) 没有选择红色,所以这一行应该是 0 或者根本不列出 颜色蓝色 4 (B,C,D,E) 所有 4 都是大或小和蓝色
请有人帮我解决这个问题,我花了两天时间想知道解决方案。我可以将 CASE 与 HAVING 结合使用吗?或者我应该以某种方式解决 WHERE 问题?
注意:这个表实际上不是真实的,但如果这个问题可以解决,我可以在我的真实表中使用它,这要复杂得多。
解决方案
我自己想出了一个解决方案,当然这个示例表是胡说八道,关键是它的解决方式。
` 选择 财产, 价值, COUNT(t.itemname) 作为计数 从 ( 选择 项目名 从 桌子 通过...分组 项目名 拥有 COUNT (CASE WHEN property='size' AND value IN ('big','small') THEN 1 END) >=1 && 计数(CASE WHEN property='color' AND value IN ('blue') THEN 1 END)>=1 ) 吨 内部联接 表 ON table.itemname=t.itemname 通过...分组 适当的价值 `
推荐阅读
- c# - 一个驱动器 API 从一个驱动器获取演示权限
- r - 如何基于两个条件最小/最大过滤器使用 case_when?
- laravel - 磁盘 [视频] 没有配置的驱动程序
- wordpress - 根据 wordpress 页面模板 NuxtJs 更改布局
- c# - 实体框架标题,详细信息保存错误
- ruby - Rspec如何确定是否已经定义了一个let块?
- javascript - 从 addEventListener 访问数组
- javascript - 从javascript中的字符串中提取10位手机号码的正则表达式
- java - 来自节点 js 服务器的 Json 数据
- cakephp-3.0 - 相同特价商品 ID cakephp 3 的条件