惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
Latest news
Latest news
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Securelist
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
云风的 BLOG
云风的 BLOG
AWS News Blog
AWS News Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
美团技术团队
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
SecWiki News
SecWiki News
S
Secure Thoughts
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed

博客园 - today

赚钱和生活 Tnsping 和TCP/IP 中的ping 的區別 办公自动化漫谈培训有感 SQL Server 64 bit linked server Error with Sql server 32 bit 合并DataGrid的单元格 小心使用@@identity 浅谈反射与特性在接口系统中的应用(编码表转化) BuildSql增加了【生成数据库文档】的功能了 SQLServer2000辅助工具版本更新了 打造迅速响应的用户界面 我的SQL Server2000辅助工具 (翻译)从底层了解ASP.NET体系结构 (翻译)在C#中定义和使用自己的特性 搜索指定域名的小工具 (翻译)反射的第二部分:Emit (翻译)反射的第一部分:发现和执行 在SqlServer2000的视图中小心使用*符号 我眼中的程序员 一首打油诗
组合条件查询(初版)
today · 2008-03-20 · via 博客园 - today

例子下载
如果你正在从事一些信息系统的开发,那么不可避免的是,需要根据不同的条件去查数据,那么用户可能希望的是可以使用所有相关的条件去查询,这也就是大家认为的组合条件查询。
这里介绍的只是组合条件查询的一个雏形,灵活性、可移植性、可复执性都还不太好,这里拿出来也就是给大家一点参考,当然,在后续的日子里,我会继续完善它,争取让它具有相当高的复制性,可以给你的开发工作带来一点便利。

先截个图给大家看一下:

当然,这只是个雏形,以后它会慢慢的变得漂亮和更实用一些。
实现的代码,全部使用javascript实现,有一部分还是硬编码,由于对javascript的了解还是一点皮毛,所以还没有封装好。贴一下实现的代码吧。

        function InsertCondition(table,number)
        
{
            
//获取插入的table
            var tb = document.getElementById(table);
            
//插入一行 <tr> </tr>
            var newRow = tb.insertRow();
            
//插入一个单元格 <td> </td>
            var newCell = newRow.insertCell();
            
//创建一个select 字段
            var selField = document.createElement("select");
            selField.id 
= table + "_selField_" + number;
            
var option1 = new Option('','');
            
var option2 = new Option('育龄妇女姓名','Name');
            
var option3 = new Option('出生日期','Birthday');
            
var option4 = new Option('婚姻状况','MarriageStatus');
            
var option5 = new Option('初婚日期','MarryDate');
            selField.add(option1,
0);
            selField.add(option2,
1);
            selField.add(option3,
2);
            selField.add(option4,
3);
            selField.add(option5,
4);
            
            newCell.appendChild(selField);
            
            
var newCellLink = newRow.insertCell();
            
            
//创建一个select 连接符号
            var selLink = document.createElement("select");
            selLink.id 
= table + "_selLink_" + number;
            
var option1Link = new Option('','');
            
var option2Link = new Option('相等','==');
            
var option3Link = new Option('不相等','!=');
            selLink.add(option1Link,
0);
            selLink.add(option2Link,
1);
            selLink.add(option3Link,
2);
            
            newCellLink.appendChild(selLink);
            
            
var newCellEnd = newRow.insertCell();
            
            
//创建一个select 结束
            var selEnd = document.createElement("select");
            selEnd.id 
= table + "_selEnd_" + number;
            
var option1End = new Option('','');
            
var option2End = new Option('并且','and');
            
var option3End = new Option('或者','or');
            
var option4End = new Option('结束','end');
            selEnd.add(option1End,
0);
            selEnd.add(option2End,
1);
            selEnd.add(option3End,
2);
            selEnd.add(option4End,
3);
            
//绑定事件
            selEnd.attachEvent('onchange',CreateOrDeleteRow);
            newCellEnd.appendChild(selEnd);
        }

function CreateOrDeleteRow()
        
{
            
var sel = event.srcElement;
            
var selID = sel.id;
            
            
//分析table的名称以及number
            var list = new Array();  
            list 
= selID.split('_');
            
//当前table的总行数
            var length = document.getElementById(list[0]).rows.length;
            
//当前table的行数
            var now = parseInt(list[2]);
            
            
var val = sel.options[sel.selectedIndex].value;
            
if(val == 'end')
            
{
                
//删除剩下的行
                
                
for(var i=now;i<length;i++)
                
{
                    
                    document.getElementById(list[
0]).deleteRow();
                }

            }

            
else
            
{
                
if(now == length)
                
{
                    
                    
                    
//新增一行
                    InsertCondition(list[0],now + 1);
                }

            }

        }

//获取组合查询的sql语句
        function GetQuerySql(table)
        
{
            
var sql = '';
            
var tb = document.getElementById(table);
            
for(var i=1;i<=tb.rows.length;i++)
            
{
                
//获取字段 select
                var    selField = document.getElementById(table + "_selField_" + i);
                
var fieldVal = selField.options[selField.selectedIndex].value;
                
//获取连接 select
                var    selLink = document.getElementById(table + "_selLink_" + i);
                
var linkVal = selLink.options[selLink.selectedIndex].value;
                
//获取结束 select
                var    selEnd = document.getElementById(table + "_selEnd_" + i);
                
var endVal = selEnd.options[selEnd.selectedIndex].value;
                
                
if(fieldVal != '' && linkVal != '')
                
{
                    sql 
+= ' ( ' + 'fH' + fieldVal + ' ' + linkVal + ' fG' + fieldVal + ''
                }

                
else
                
{
                    
                    alert(
'请把组合条件输入完整!');
                }

                
if(endVal != 'end')
                
{
                    sql 
+= ' ' + endVal + ' ';
                }

            }

            
return sql;
        }

代码比较简单,实现的原理也就不罗嗦了。