这是我的表结构:
user_id features
------------------
1 1,2,3,4,5
2 2,4,5
3 1,2
4 3,4,5
id feature
------------------------
1 item1
2 item2
3 item3
4 item4
5 item5
我想加入两个表并查询例如。用户ID 2并获得以下结果:
id_feature feature
-----------------------------------------
2 item2
4 item4
5 item5
我在“功能”中存储了多达500个值,这就是我不想创建数千个记录的原因。这有可能以一种简单的方式实现吗?
答案 0 :(得分:5)
没有合适的联结表的理由不充分。 SQL旨在支持大型表并有效地进行处理。
那就是说,你可以做你想做的事:
select f.*
from users u join
features f
on find_in_set(f.id, uf.features) > 0
where u.user_id = 2;
但是,此查询的效率低于正确的表结构,并且具有适当的UserFeatures
表,其中包含user_id
和feature_id
的列。
答案 1 :(得分:2)
您应该为每个用户ID功能组合创建一行。即使它意味着数千行。您仍然可以按照自己的意愿行事,但这会让您失去性能,因为您会丢失任何索引并且必须分析字符串。
如果你仍想继续这个糟糕的设计:
select feature.* from
feature f inner join user_feature uf on
concat('%,',f.id,',%') like concat(',',uf.filters,',')
where uf.user_id = 2