前言
机房收费系统,对于我来说已经做了好多次。现在让我们做导师,真正感觉到受益最大的就是自己。每次在给他们要求什么的时候,其实是对自己的督促。换种说法就是,你总是在要求别人怎样怎样的时候,其实也是在对自己做要求。
知易行难,所以有些事情需要多次强调。机房收费系统也一样,又一次的回顾,又一次的测试,让我有了不同的认识。
问题概述
这个问题是关于组合查询的,关于组合查询,我附一个图,大家看一下图就大概能明白这个组合查询是怎么回事。
对于里面的业务逻辑和健壮性判断这里我就不说了,遇到的问题是:你说上面的查询,会查到什么,和你想查的结果一样么?
我先说下我想查的结果:首先前两个进行或运算,然后与第三个进行与运算,所以这样的结果应该是空才对。
可是,那只是我想的结果,但结果却是出来结果了,这是为什么呢?
问题解答
问题就在于数据库中and和or这两个关键字优先级是不一样的。and优先级要比or的优先级高,所以出现了与愿望不符的结果。这给了我们警示:在写程序时,尽可能对运算用小括号进行优先级划分。将出错机会降低到最小。
问题深入
现在问题来了,怎么加括号呢?首先先说一下这个程序没有修改前的运行规则:
1. 定义一个字符串strSQL="select * from 表明 where"
2. 如果只按照一个条件查询,假设这个条件为A,那么strSQL=strSQL+A,(A为第一个条件的字符串)
3. 如果有两个条件,第二个条件的字符串为B,那么strSQL=strSQL+B
4. 如果有三个条件,同3.
5. 执行strSQL语句。
现在需要再第一个条件和第二个条件加上括号。有两种加法
第一种
strSQL+(
一个条件的话A+)
两个条件strSQL-),然后B+)
这样在三个条件的时候,前两个就始终最先运算
第二种
再定义一个变量strEndSQL。
一个条件strEndSQL=strSQL+A,
两个条件strEndSQL=strSQL+A+B
三个条件的时候strEndSQL=strSQL+(+A+B+)+C
(说明,上面说的这两种需要大家结合自己的代码想一想才更清晰,没有源代码的可以给我留言,我给你源代码)
问题深入
其实问题已经解决了,干嘛还不停住呢?
原因就是我感觉这个问题很有代表性。我们都太懒了,组合查询这个思路,应该是从学生信息管理系统里面学的吧。这个思路已经根深蒂固,所以每次遇到此类问题时,大家都往那方面去想,以至于已经出现了问题,首先的第一想法是,我怎么去修改。
不得不承认,在修改的过程中,能学到新的知识。例如此例,第一种进行完后,你对字符串的操作肯定会更熟悉。但是干嘛要对自己画地为牢,固步自封呢?
这些其实不是我自己一个人的思想结晶,是在给海燕姐测试的时候,遇到的这个问题。我当时是第一种思路,在他做出来后,我们进行交流,我们都没有想到第二种,只是她的一种我感觉行不通的方法,给了我这个思路。
这种非技术上的学习,仅仅是看视频,是学习不到的。通过和他们交流,我感觉我收获了很多。
总结
循规蹈矩,固然好。但是能够突破重围,体验另一个世界的美好,又有何不佳呢?不要被以往的思路禁锢住,相似的问题,用相同的解法,可能会出现你想象不到的问题,而当出现问题时,可以试着想另外的解决思路。因为相似不等于相同!!!