MySQL查询表使用分隔字符串

时间:2014-06-28 19:14:24

标签: php mysql sql

这是我的表结构:

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个值,这就是我不想创建数千个记录的原因。这有可能以一种简单的方式实现吗?

2 个答案:

答案 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_idfeature_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