您的位置:首页 > 编程语言 > PHP开发

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

2013-04-17 19:36 761 查看
记录政法委办公系统代码改动:

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

        弹出搜素框的部分代码:../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 ....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐