1
Waverly 2023-09-22 11:21:57 +08:00
SELECT *
FROM ps WHERE (name = 'num' AND value = '2' AND pid IN (SELECT pid FROM your_table WHERE name = 'category' AND value = 'M')) AND (name = 'price' AND value = 'high' OR name = 'heat' AND value = 'true'); |
2
swulling 2023-09-22 11:36:00 +08:00
表没问题。你这种多条件查询就只能二次筛选。就是 1L 的办法,先筛出一个条件,再筛第二个条件。
|
3
MoYi123 2023-09-22 11:43:11 +08:00
建议放 json 里面, 然后建个倒排索引. 不然太折磨了.
|
4
yesterdaysun OP @MoYi123 大哥, 能详细说一下这个方案吗? 是不是要换 ES, MySQL 能搞么
|
5
opengps 2023-09-22 12:19:55 +08:00
已经这么设计了吗?实在不行,用触发器自动更新到新的表结构吧,这种表写入量少,触发器没有太高并发还算适合
|
6
BeautifulSoap 2023-09-22 12:33:23 +08:00 3
极其经典的 EAV 模型问题。本质上产生这个问题的原因是想用 RDS 来实现 NoSQL 的功能。mysql 后来添加了 json 字段就是为了解决这个问题
https://juejin.cn/post/6997230227868876830 https://zhuanlan.zhihu.com/p/404294076 我的项目实践经验就是,用 join 是最好的方法。如果你是 mysql 新版本之类的也可以改数据库结构,直接定义个 json 字段把商品信息的 json 存进去倒也行(反正已经这样定义数据了,你查询速度怎么都快不了了)。最好最彻底的解决办法就是上 NoSQL 或基于文档的数据库,如 mongodb ,elasticsearch 之类的 |