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