mysql - 基于多行查找匹配结果的 SQL 查询
问题描述
我有两张桌子。
1. 物品
id user_id image
1 12 -
2. item_details
id item_id category_field_id value is_description
1 1 11 honda 0
2 1 12 xblade 0
3 1 13 X123 0
4 1 14 its a very good bike 1
这些表用于存储基于 category_field_id 的动态表单的项目详细信息。所以这里我需要的是
我需要基于用户搜索的完全匹配的所有项目列表
where (category_field_id = 11 AND value = honda)
AND (category_field_id = 12 AND value = xblade)
AND (category_field_id = 13 AND value = X123)
AND (category_field_id = 14 AND value LIKE search_string_from_website);
除了描述字段之外,所有字段都与like 子句中的描述字段匹配。我已经尝试过,但我无法得到任何适当的解决方案。请帮我。
解决方案
我认为您想在单独的行上找到所有四个条件都为真的项目。这表明聚合:
select item_id
from item_details
group by item_id
having sum(category_field_id = 11 AND value = 'honda') > 0 and
sum(category_field_id = 12 AND value = 'xblade') > 0 and
sum(category_field_id = 13 AND value = 'X123') > 0 and
sum(category_field_id = 14 AND value LIKE 'search_string_from_website') > 0 ;
推荐阅读
- java - 在 JOOQ 的 ExecuteListener 中访问插入/更新映射
- angular - NGRX Entity addOne 替换当前状态的对象
- java - 解析 XML 文件的 java 代码的 JUnit 测试用例要求
- mysql - 动态内容类型:一张有很多列的表格还是每个表格一张?
- angularjs - 如何根据下拉值在表上应用过滤器
- excel - 如何将列中的每个唯一名称复制到主表?
- java - 如何实现连接服务类以在我们的拨号器应用程序中添加运营商呼叫功能?
- node.js - 使用 pm2 和 bytenode 启动 NodeJS 应用程序
- java - Java 8:ArrayDeque<>.poll 在并行环境中返回 null
- docker - 使用 Gitlab CI 将 Docker 镜像部署到 Heroku