透明 发表于 2015-1-16 22:13:09

MYSQL网页设计mysql字符串对照函数:concat和regexp

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的使用在未来将继续呈成长趋势。”

飘飘悠悠 发表于 2015-1-18 23:22:16

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

活着的死人 发表于 2015-1-25 12:10:27

学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!

爱飞 发表于 2015-2-2 22:03:13

代替了原来VB式的错误判断。比Oracle高级不少。

admin 发表于 2015-2-8 10:49:02

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

简单生活 发表于 2015-2-25 09:38:49

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

精灵巫婆 发表于 2015-3-7 19:31:12

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

再现理想 发表于 2015-3-15 13:07:52

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

柔情似水 发表于 2015-3-22 01:10:46

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
页: [1]
查看完整版本: MYSQL网页设计mysql字符串对照函数:concat和regexp