在MySQl中的垂直行分隔值中查找行?

问题描述:

假设我有一个字段'category',值为'1 | 2 | 3'。我想在mysql中进行搜索,以便它将所有匹配我的搜索参数的行返回到类别的值中。 例如:在MySQl中的垂直行分隔值中查找行?

$cat_id = 1; 

SELECT * FROM `myTable` WHERE cat_id is equal or found in category with values '1|2|3'... 

像that..i不知道如何把它放在正确的SQL查询。

任何想法?提前致谢。

+0

看起来你正在实现某种“记录内的记录”,绕过了DBMS的原始有用性。使用单独的表格,或查看SET数据类型:http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html – janmoesen 2010-04-18 09:14:43

那么你可以使用MySQL特定的正则表达式运营商进行管理:

WHERE category RLIKE '(\\||^)'+cat_id+'(\\||$)' 

(假设MySQL的反斜杠被启用,这是他们在默认情况下非标)

但是,这种查询不是可索引的,它通常被认为是非常糟糕的模式设计,以将多个数据点组合成一列。通常的解决方案是myTablecategory的连接表。

+0

我试过了,它对我来说工作得很好。现在是一个良好的开端...无论如何,谢谢。 – Trez 2010-04-18 10:49:24

这个必须是“category”,而不是field。

SELECT * from mytable, cattable, where cattable.id=1 and cattable.mid=mytable.id