|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MySQL的低成本来自于其简单性吗?它的普及性是由于其低成本吗?其实,在MySQL的最“好”与最“不好”的功能之间没有明显的分界线,但它们组合在一起就形成了一副让我们欣赏的作品。</p>成绩形貌
好比table1中有两笔记录
nameno
a2,9
b8,10
然后有一串字符串,是0,1,2,3,4
然后经由过程一条sql,找出no为2,9的纪录来```
由于字符串中有2,数据中也有2
具体注释
------------------------------
表的字段就是
nameno
a2,9
b8,10
字符串是str="0,1,2,3,4"
接上去就是查no字段里跟str里有交集的纪录
查询的了局就是name=a的,no=2,9的纪录。
12select*fromtable1whereconcat(,,no,,)regexpconcat(,0,,1,,2,,3,,4,);大概:
12select*fromtable1whereconcat(,,no,,)regexpconcat(,(,replace(0,1,2,3,4,,,),),);因为某些缘故原由,偶然候我们没有依照范式的计划原则而把一些属性放到统一个字符串字段中。好比团体乐趣,偶然候我们计划表为
createtablemembers(uidintprimarykey,unamevarchar(20),hobbyvarchar(100));
表中内容以下
mysql>select*frommembers;
+-----+-------+---------------------------------+
uidunamehobby
+-----+-------+---------------------------------+
1AAAA音乐,影戏,收集,篮球,浏览,乒乓球
2BBBB音乐,浏览,乒乓球,发愣,围棋,参禅
3CCCC结交,乒乓球
4DDDD台球,收集,看书,旅游
5EEEE音乐,发愣,下围棋,参禅
+-----+-------+---------------------------------+
4rowsinset(0.00sec)
假如我们如今想查找一个与某个用户X(浏览,结交,围棋,足球,滑雪)有着不异喜好的会员纪录假如来操纵呢?
在别的数据库中,我们能只经由过程程序来大概存储历程来分化这个"浏览,结交,围棋,足球,滑雪"字符串为独自的喜好项目,然后一个一个举行like%xxxx%来查询。但在MySQL中我们能够间接使用这个regexp正轨表达式来机关SQL语句来完成。
起首我们把浏览,结交,围棋,足球,滑雪转换成为正则式为浏览结交围棋足球滑雪,在正则表达式中为或的意义
mysql>selectreplace(浏览,结交,围棋,足球,滑雪,,,);
+---------------------------------------------+
replace(浏览,结交,围棋,足球,滑雪,,,)
+---------------------------------------------+
浏览结交围棋足球滑雪
+---------------------------------------------+
1rowinset(0.00sec)
如许我们能够用SQL语句以下。
mysql>select*frommemberswherehobbyregexpreplace(浏览,结交,围棋,足球,滑雪,,,);
+-----+-------+---------------------------------+
uidunamehobby
+-----+-------+---------------------------------+
1AAAA音乐,影戏,收集,篮球,浏览,乒乓球
2BBBB音乐,浏览,乒乓球,发愣,围棋,参禅
3CCCC结交,乒乓球
5EEEE音乐,发愣,下围棋,参禅
+-----+-------+---------------------------------+
3rowsinset(0.00sec)
如上语句我们能够经由过程一句SQL失掉一切hobby包括浏览,结交,围棋,足球,滑雪任一项的纪录。
但上述的语句中另有一点小的缺点,那就是把下围棋这一条也选择了出来,假如准确婚配的话这笔记录不该该被选中。为了不这类情形,我们对SQL语句做以下改善。
把正则式改成,(浏览结交围棋足球滑雪),也就是请求婚配项前后必需有一个界定符","
mysql>selectconcat(,(,replace(浏览,结交,围棋,足球,滑雪,,,),),);
+---------------------------------------------------------------+
concat(,(,replace(浏览,结交,围棋,足球,滑雪,,,),),)
+---------------------------------------------------------------+
,(浏览结交围棋足球滑雪),
+---------------------------------------------------------------+
1rowinset(0.00sec)
mysql>select*frommembers
->whereconcat(,,hobby,,)regexp
->concat(,(,replace(浏览,结交,围棋,足球,滑雪,,,),),);
+-----+-------+---------------------------------+
uidunamehobby
+-----+-------+---------------------------------+
1AAAA音乐,影戏,收集,篮球,浏览,乒乓球
2BBBB音乐,浏览,乒乓球,发愣,围棋,参禅
3CCCC结交,乒乓球
+-----+-------+---------------------------------+
3rowsinset(0.00sec)
如许制止了第5笔记录被选中。
固然也能够使用这类正则式,浏览,,结交,,围棋,,足球,,滑雪,,但效力明显不如,(浏览结交围棋足球滑雪),这类了。
根据Evans的调查报告,“MySQL的使用在未来将继续呈成长趋势。” |
|