< -- 星星之火,可以燎原 -- >
首  页Python 电脑应用股票操盘经典收藏摄影学习网站设计学习资料杂感随笔留言本
热门话题:人生股票故事操盘系统生活燎原股市投资古典阿零经典
当前到访用户:天涯游客        
28
SQL并列组合查询的ASP代码解决方法
2013-9
作者:阿零 | 来源:本站原创 | 分类:网站设计 | 阅读:214 次 | 评论:1 条

这是阿零当初发表在【洗米器博客】里的一篇原创文章,本来觉得没有太多的技术含量,所以在网站改版时删减掉了。今天在查询网站外链时意外地发现很多网站转载了这篇原名为【SQL并列组合查询的另类解决一法】的文章,看来,文章内所阐述的内容还是得到了一些朋友的认可,所以,又把它转了回来,希望能给大家提供一点点参考。原文如下:

在日常的数据库开发应用中,我们经常会遇到组合查询,最近,阿零在改版洗米器网站的过程中想到了一个另类解决方法,不敢藏私,现把思路发出来和大家共勉。

数据库示例:

比如在一个销售表(item)中部分字段如下:

itemdate(销售日期,短日期型),ltemcount(销售数量,数值型),itemer(业务员),itemarea(客户所在区域),itemstate(单据状态,逻辑型)

我们希望实现如下功能的组合查询:

1、单项目统计:某期间段内的销售统计;销售数量大于(或小于)一个值的统计;某业务员的销售统计;某区域的销售统计;销售单据状态(如:审核或未审核、业务员提成已付或未付、已返利或未返利)。

2、组合查询以上字段的任意组合条件:如某业务员某时间期间尚未提成的销售情况;某业务员在某时间期间销售数量大于某值的销售情况;等等……

界面及简要代码示例:

开始日期:
终止日期:
销售数量:
销售人员:
所在区域:
单据状态:
        

<input type="checkbox" name="cbstime" />开始日期:<input type="text" style="width:200px" name="starttime" />
<input type="checkbox" name="cbetime" />终止日期:<input type="text" style="width:200px" name="endtime" />
<input type="checkbox" name="cbcount" />销售数量:<select name="yxh" style="width:100px;height:22px;"><option value="=">等于<option value=">=">大于或等于<option value="<">小于<option value="<=">小于或等于<input type="text" style="width:100px" name="scount" />
<input type="checkbox" name="cber" />销售人员:<input type="text" style="width:200px" name="ser" />
<input type="checkbox" name="cbarea" />所在区域:<input type="text" style="width:200px" name="sarea" />
<input type="checkbox" name="cbstate" />单据状态:<input type="text" style="width:200px" name="sstate" />
<input type="button" value="开始查询" /> <input type="button" value="关闭退出" />


常规思路与处理方法:

因为示例中的复选框是可以任意组合的,可能一个也没有选中,可能只选中一个,或者选中了第一、第三、第五个,甚至全部选中。那么我们在构造SQL语句的时候就需要判断任何可能的组合,大家都知道,一个也没有选中时的SQL语句是“select * from item”,有一个选中时SQL语句是“select * from item where 条件”,有多个选中是SQL语句是“select * from item where 条件1 and 条件2 and 条件3 ……”,问题的关键在于,你不知道这个示例中的六个条件谁会出现在第一,谁会出现在第二。因此,要在SQL语句中正确插入where和and,你必须罗列任意可能的情况加以判断,如果你的逻辑思维够好,六个复选框的组合查询难不倒你,但是,如果你的逻辑思维不咋地或者是十个甚至二十个复选框呢?想想吧,那是多么让人崩溃的一件事情。

另类处理办法:

其实没有什么技术含量在里边,就是加了几个简单字符而已:“where 1= 1”,很好理解的东西,直接看示例的SQL语句及处理页面的ASP代码:

mysql="select * from item where 1 = 1"

if request.Form("cbstime")="on" then tj1=" and itemdate >= cast('"&request.Form("starttime")&"' as datetime)
if request.Form("cbetime")="on" then tj2=" and itemdate <= cast('"&request.Form("endtime")&"' as datetime)
if request.Form("cbcount")="on" then tj3=" and itemcount "&request.Form("yxh")&" "&request.Form("scount")
if request.Form("cber")="on" then tj4=" and itemer = '"&request.Form("ser")&"'"
if request.Form("cbarea")="on" then tj5=" and itemarea = '"&request.Form("sarea")&"'"
if request.Form("cbstate")="on" then tj6=" and itemstate = "&request.Form("sstate")

mysql=mysql&tj1&tj2&tj3&tj4&tj5&tj6&" order by……"

本文旨在说明组合查询的另类思路,抛砖引玉而已,具体应用中可能还要结合实际(比如,需要判断起始日期输入值是否为日期格式,或者相应地进行转换,开始日期要小于结束日期等等)改动部分代码,在此不做赘述。好了,尽情去发挥你的创意吧。洗米器网站阿零欢迎大家提出不同意见,也很热心和大家共同探讨。

本文为【燎原博客】的原创文章,由阿零于【2510天前】发表在【网站设计】分类下,您可以对其【发表评论】,或者引用(转载)到您的个人博客或网站,但必须保留文章的出处、链接地址以及作者等相关信息。
【文章标题】:SQL并列组合查询的ASP代码解决方法
【链接地址】:http://aoeboke.com/archives/1309282333.html
【文章标签】:SQL查询 组合查询 ASP代码 方法 
网友评论:本文当前共有【1】条评论。
第1楼:领秀故湘【IP:192.69.200.37】于 2013/10/27  19:29 对本文发表评论:
果然如诸葛草帽所说,网站整体颜色配置不错,值得学习!支持一下!
【阿零】于 2013/10/28 回复:过奖过奖,热忱欢迎朋友们的光临。
昵称:*
邮箱:*
网站:
验证:看不清?点一下 *
本站公告
欢迎各位朋友的到来,【燎原博客】是博主自己编写网站源码设计制作的个人博客,如果您在浏览中发现有不足的地方或者有什么建议,衷心希望能反馈给我,谢谢!
淘宝客
阅读排行
按月归档
网友评论
文章标签
最新发表
博客统计
文章总数:304 篇
评论总数:121 条
留言总数:23 条
注册会员:17 人
本周更新:0 篇
网站运行:2658 天
最后更新:2020/6/18 15:46
【燎原博客】部分内容来源于网络,版权归原作者所有,如有冒犯实属无意,请及时联系告之,博主在此先行向您致歉,并将在第一时间进行删改。
本站是博主自己设计制作并编写网站程序源码,主要记录个人生活、网站设计、学习电脑及网络应用知识,并介绍一些特色软件和股票指标公式的个人博客类网站。
Designed and Powered by zhlinpb CopyRight © 2013 燎原  All Rights Reserved  滇ICP备13002614号