php提取记录列表以及搜索功能的实现

记录政法委办公系统代码改动:

        我们通常会实现这样一种功能:比如说在政法委办公系统中,有显示出车统计的出车记录列表,这个无可厚非,无非是从数据库中提取出相关的数据在页面上进行显示即可(有时为了信息显示更全,在查询语句中会用到多表连接查询),当记录数很多的时候提供“检索”功能就显得很必要了,这里我们要说的是一种方式,实现数据记录的显示和搜索功能,走的是同一个函数,只是根据传递的查询参数的有无来显示出不同的东西。

        弹出搜素框的部分代码:../car/templates/cn/js/driverecords.js

 $("#search_dialog").dialog({
		        bgiframe: true,
		        draggable: false,
		        resizable: false,
		        width: 400,
		        autoOpen: false,
		        modal: true,
		        title: "车辆查询参数",
		        mtype:'GET',
		        buttons: 
		        {
		        	"确定": function() {
		        		
		        				var sql = "car_no=" + $("#car_no").val();
		        				//sql += "&dr_name=" + $("#dr_name").val();
		        				sql += "&cb_destination=" + $("#cb_destination").val();
		        				//sql += "&driverecords_status=" + $("#driverecords_status").val();
		        			
		        				$("#driverecordslist").jqGrid('setGridParam', {
		        					//url: 'getrecords.php?search=true&' + sql
		        					url: 'getdriverecords.php?search=true&' + sql
		        				});
		        				$("#driverecordslist").jqGrid().trigger('reloadGrid');
		        		$(this).dialog('close');
		        		},

			        "取消": function() {
			        	$(this).dialog('close');
			        }
		        }
		    });

          这里最重要的是要把查询的参数通过jquery获取,并传递到处理页面,这里代表的参数为“车牌号”和“目的地”,相应的效果是:

         
       

  在 ../car/getdriverecords.php中接收传来的参数,并将若干个参数传入到数据库查询函数中进行处理,在下面的代码中可以看到该函数中有很多参数,包括搜索时需要传递过来的参数,这里即使参数没有值也不影响我们查询,只要它有值就会作为我们的一个条件,让我们继续向下看:

//Get the search parameters
$car_no = !isset($_GET['car_no']) ? "":$_GET['car_no'];
$car_catalog = !isset($_GET['car_catalog']) ? "":$_GET['car_catalog'];
$car_capacity = !isset($_GET['car_capacity']) ? "":$_GET['car_capacity'];
$car_status = !isset($_GET['car_status']) ? "":$_GET['car_status'];

/****************************/
$dr_name = !isset($_GET['dr_name'])?"":$_GET['dr_name'];
$cb_destination = !isset($_GET['cb_destination'])?"":$_GET['cb_destination'];
/****************************/

$res_p->page = 1;
$res_p->total = 1;

$lists = CarController::QueryDriveRecords($sidx,$sord,$car_no,$dr_name,$cb_destination);   # 在函数中增加多个选项
//print_r($lists);
$count = sizeof($lists);

 

在 ../car/controllers/cardal.php中真正实现查询功能:

function GetDriveRecords($order,$ordered,$car_no,$dr_name,$cb_destination)
{
	$select_sql="  SELECT 
			carbook.cb_destination AS CB_DESTINATION, 
			carbook.cb_startTime AS CB_STARTTIME,
			carbook.cb_endTime AS CB_ENDTIME, 
			carbook.dr_id AS DR_ID,
			carbook.cb_selfdriver AS CB_SELFDRIVER,
			car.car_no AS CAR_NO,
			dr_name AS DR_NAME
			FROM (carbook,car)
			INNER JOIN driver ON(driver.dr_id=carbook.dr_id)
			WHERE carbook.car_id = car.car_id and carbook.cb_status = '1'";

	//echo $select_sql ;
	if($order != "" && $ordered != "") #是否需要排序
		$orderby_sql = " ORDER BY $order $ordered ";
	else 
		$orderby_sql = " ";
		
		
    /***************************************************/
	$query_sqls = array();   # 构造出的查询数组
	if($car_no != "")        # 增加对车牌号的查询条件 
		$query_sqls[] = "car.car_no LIKE '%$car_no%' ";
    if($cb_destination != "")     # 增加对目的地的查询条件
        $query_sqls[] = "carbook.cb_destination LIKE '%$cb_destination%'";
        
	$query_sql = "";
	if(sizeof($query_sqls) > 0)	
		$query_sql = trim(implode(" AND ",$query_sqls));    # 如果该查询数组中有多个条件,则用AND将它们拆分开组合在一起
		
	//echo $query_sql ;
	if($query_sql != ""){
      	$sql = "$select_sql and $query_sql $orderby_sql ";		
	}else{
	   $sql = "$select_sql $orderby_sql ";	
	}
# 增加对限定条件的修改
	/******************************************************/
	$result = ExecuteQuery($sql);
	return $result;
}

          这样就可以了,因为如果你们有使用搜索的话,它执行的就是最基本的查询语句,不会加上我们的限定语句,显示出的就是数据列表,而当我们点击搜索确定后由于接收到了参数,所以在查询数组中会有多个限定查询,最后将它们拼接在一起就组成了我们最终的搜索限定语句,那么它显示的结果就是我们查询所要得到的结果了,是不是很巧妙啊。

         下面我们来输出一下,当使用搜索和不使用搜索时构造成的查询语句有什么不同:(firbug查看)
        

         可以看到最后的限定条件只有:

WHERE carbook.car_id = car.car_id and carbook.cb_status = '1'  ORDER BY cb_starttime desc 

      

        使用搜索拼成的查询语句:

       

        它的限定条件为:

WHERE carbook.car_id = car.car_id and carbook.cb_status = '1' and car.car_no LIKE '%李强%'  AND carbook.cb_destination LIKE '%天安门广场%'  ORDER BY cb_starttime desc 

        可以看到相比之前的多了司机和目的地查询条件的限定,因此得到的结果就是我们查询的结果喽。

        That's all ....

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值