在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查询。
任何想法?提前致谢。
答
那么你可以使用MySQL特定的正则表达式运营商进行管理:
WHERE category RLIKE '(\\||^)'+cat_id+'(\\||$)'
(假设MySQL的反斜杠被启用,这是他们在默认情况下非标)
但是,这种查询不是可索引的,它通常被认为是非常糟糕的模式设计,以将多个数据点组合成一列。通常的解决方案是myTable
到category
的连接表。
+0
我试过了,它对我来说工作得很好。现在是一个良好的开端...无论如何,谢谢。 – Trez 2010-04-18 10:49:24
答
这个必须是表“category”,而不是field。
SELECT * from mytable, cattable, where cattable.id=1 and cattable.mid=mytable.id
看起来你正在实现某种“记录内的记录”,绕过了DBMS的原始有用性。使用单独的表格,或查看SET数据类型:http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html – janmoesen 2010-04-18 09:14:43