在mysql中,可以使用正则表达式去进行匹配,比如在如下的场景,是十分有用的:
比如有如下的两个表
employee_hobby
id hobbies
--- --------
1 Travelling
2 Suring the Internet
3 Reading
4 Swimming
5 Meeting Friends
6 Cooking
. .
. .
10 Watching Movie
employee
id hobby_ids
--- ---------
1 1,4,3,6,10
2 1,3,4,10
3 7
. .
. .
10 3,5,6,9
employee表记录了某个员工的爱好有哪些,这里不是用典型的一对多来存储,而是用
逗号来进行分隔
那么,要找的是:
1) 有哪些人有4号的爱好
SELECT id FROM employee WHERE hobby_ids REGEXP "[[:<:]](4)[[:>:]]"
注意:
[[:<:]], [[:>:]]
这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字字符是alnum类中的字母数字字符或下划线(_)。
2)查找同时有这些爱好的:
SELECT id FROM employee WHERE hobby_ids REGEXP "[[:<:]](1|4|10)[[:>:]]"
比如有如下的两个表
employee_hobby
id hobbies
--- --------
1 Travelling
2 Suring the Internet
3 Reading
4 Swimming
5 Meeting Friends
6 Cooking
. .
. .
10 Watching Movie
employee
id hobby_ids
--- ---------
1 1,4,3,6,10
2 1,3,4,10
3 7
. .
. .
10 3,5,6,9
employee表记录了某个员工的爱好有哪些,这里不是用典型的一对多来存储,而是用
逗号来进行分隔
那么,要找的是:
1) 有哪些人有4号的爱好
SELECT id FROM employee WHERE hobby_ids REGEXP "[[:<:]](4)[[:>:]]"
注意:
[[:<:]], [[:>:]]
这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字字符是alnum类中的字母数字字符或下划线(_)。
2)查找同时有这些爱好的:
SELECT id FROM employee WHERE hobby_ids REGEXP "[[:<:]](1|4|10)[[:>:]]"