1. 程式人生 > >關於通過easyui對mysql的模糊查詢以及按時間段查詢的個人見解

關於通過easyui對mysql的模糊查詢以及按時間段查詢的個人見解

建表是使用easyui的datagrid來顯示查詢mysql的結果,系統是基於SSH框架建立

先來張圖看看介面

1、自定義easyui datagrid的工具欄

<div id="toolbar">
			查詢條件:     
			<input id="content" class="blur-content" value="請輸入單據號或客戶姓名"/>     日期:  
			<input id="begindate" type="text" class="easyui-datebox" currentText="今天" closeText="關閉" />   到   
			<input id="enddate" type="text" class="easyui-datebox" currentText="今天" closeText="關閉" />
			<input style="width:10px;visibility:hidden" />
			<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="searchOrder()">查詢</a>
			<br/>
			<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit',plain:true" onclick="editOrder()">修改訂單</a>
			<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-delete',plain:true" onclick="deleteOrder()">刪除訂單</a>
			<a href="#" id="unchecked" class="easyui-linkbutton" data-options="iconCls:'icon-unchecked',plain:true" onclick="multipleChecked()">選擇多個商品</a>
		</div>

2、搜尋按鈕的程式碼

function searchOrder(){
	//$.messager.alert('提示',"search","info");
	var content = $.trim($('#content').val());		//獲取搜尋框的內,$.trim()可以消除前後空格
	var begindate = $('#begindate').datebox('getValue');	//獲取查詢的起始日期
	var enddate = $('#enddate').datebox('getValue');	//獲取查詢的終止日期
	if(content=="請輸入單據號或客戶姓名"){content=null;}	//當沒有輸入內容時設為null
	if(begindate==""){begindate=null;}
	if(enddate==""){enddate=null;}
	else{enddate=enddate+" 23:59:59";}	
	//$.messager.alert('提示',content+"&"+begindate+"&"+enddate,"info");
	$('#tbQueryList').datagrid('reload',{		//重新載入datagrid
		'criteria.rows':16,			//設定1頁的行數					
		'criteria.currentPage':1,			//設定顯示第幾頁
		'criteria.strVal1':content,			
		'criteria.strVal2':begindate,
		'criteria.strVal3':enddate
	});
}

說明1:

else{enddate=enddate+" 23:59:59";}

上面這行程式碼是為了防止在mysql查詢時遺失截止日期當天的訂單
例如:在mysql查詢以下語句

SELECT	SALES_ID,wms_client.CLIENT_ID,SALES_NUMBER,CLIENT_NAME,SALES_DATE,ORDER_TYPE,ORDER_STATUS,
	AMOUNT_COLLECTION,AMOUNT_ADVANCE,ACCOUNT_DATE,NOTES
FROM	wms_sales,wms_client
WHERE	wms_sales.CLIENT_ID = wms_client.CLIENT_ID
	AND SALES_DATE>='2013-01-01' 
	AND SALES_DATE<='2013-02-01'

上面SQL語句查詢的結果只會顯示SALES_DATE從2013-01-01 00:00:00到2013-02-01 00:00:00的記錄,而把2013-02-01當天的記錄全都過濾掉,所以為了得到截止日期當天的記錄,將最後一行SQL語句改成

AND SALES_DATE<='2013-02-01 23:59:59'

說明2:

	'criteria.strVal1':content,			
	'criteria.strVal2':begindate,
	'criteria.strVal3':enddate

上面三行jQuery程式碼是將三個查詢條件(查詢內容,起始日期,截止日期)傳回後臺,載入相應的sql語句裡面

3、後臺action程式碼

public String getSalesList(){
		if(criteria == null) criteria = new SimpleQueryCriteria();
		super.queryForList(SqlConstants.GET_SALESLIST, SqlConstants.GET_SALESLIST_COUNT,criteria);
		return SUCCESS;
	}

criteria是一個分頁的工具類,SqlConstants是一個將sql語句對映成常量的類(其實就是起一箇中介的作用)

4、sqlmap程式碼(用iBatis動態SQL標籤)

<select id="getSalesList" resultClass="HashMap">
	<![CDATA[
	 	SELECT	SALES_ID,wms_sales.CLIENT_ID,CLIENT_NAME,SALES_NUMBER,DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
	 		ORDER_TYPE,ORDER_STATUS,AMOUNT_COLLECTION,AMOUNT_ADVANCE,ACCOUNT_DATE,NOTES
		FROM	wms_sales,wms_client
		WHERE	(ORDER_STATUS='2' OR ORDER_STATUS='3') 
			AND wms_sales.CLIENT_ID=wms_client.CLIENT_ID
	]]>
	<isNotEmpty property="criteria.strVal1" prepend="AND">
   		<![CDATA[
   			CONCAT(SALES_NUMBER,CLIENT_NAME) LIKE concat('%',#criteria.strVal1#,'%')
   		]]>
   	</isNotEmpty>
	<isNotEmpty property="criteria.strVal2" prepend="AND">
   		<![CDATA[
   			SALES_DATE >= #criteria.strVal2#
   		]]>
   	</isNotEmpty>
   	<isNotEmpty property="criteria.strVal3" prepend="AND">
   		<![CDATA[
   			SALES_DATE <= #criteria.strVal3#
   		]]>
   	</isNotEmpty>
	<![CDATA[
		ORDER BY SALES_ID LIMIT $criteria.index$,$criteria.rows$	
	]]>
	</select>


說明1:

<isNotEmpty>  如果引數不為空則查詢條件有效。引數的資料型別為Collection  String 時引數不為NULL或""。

prepend:可被覆蓋的SQL語句組成部分,新增在語句的前面。
property:被比較的屬性

如下所示:

<isNotEmpty prepend=”AND” property=”firstName” > 
	FIRST_NAME=#firstName# 
</isNotEmpty>


說明2:

CONCAT(SALES_NUMBER,CLIENT_NAME) LIKE concat('%',#criteria.strVal1#,'%')

在mysql中concat 等同於字串連線符 ||,上述SQL語句相當於以下語句

SALES_NUMBER LIKE concat('%',#criteria.strVal1#,'%') OR CLIENT_NAME LIKE concat('%',#criteria.strVal1#,'%')



 5、測試

 

 由於是模糊查詢,所以只要銷售單編號和客戶姓名含有115的都會顯示