2014-10-02 115 views
0

MySQL查询包含

id name(varhcar) 
2 15 
3 15,23 
4 1315,424 
5 1512,2323 
6 23,15,345 
7 253,234,15 

我需要找出其中包含15这意味着我需要2,3,6,7,不是4,5的值。 以上是样本数据,实时可以是任何数字。 任何人都可以帮我吗?

+2

使用'FIND_IN_SET()'函数,它在MySQL文档中。 – Barmar 2014-10-02 15:06:41

回答

1

如果你的数据库是小,考虑使用find_in_set功能:

select * from your_table 
where find_in_set('15',name); 

考虑改变模型,掌握细节表提高速度,如果你有一张大桌子。

0

这是怎样的关系模型,你可以采取以使这是一个很容易解决的问题:

TABLE: records 

id 
2 
3 
4 
5 
6 
7 

TABLE: values 

record_id value 
2   15 
3   15 
3   23 
4   1315 
4   424 
5   1512 
5   2323 
6   23 
6   15 
6   345 
7   253 
7   234 
7   15 

然后你就可以查询:

SELECT DISTINCT id FROM records 
INNER JOIN values ON records.id = values.record_id AND values.value = 15 

这是你可以采取的唯一办法MySQL的查询优化器的好处。

不是说你不可能做你想做的事,但它有点错过了观点。

如果您已经以这种格式存储数据,则应使用类似于Java的split或PHP的explode这样的编程语言,编写一次性迁移以将其转换为此“规范化”格式。