PHP 搜索功能数据库语句查询条件的类
2009-03-27 17:42
811 查看
以前用搜索的时候直接自己写SQL语句,今天写了一个类,觉得还蛮好玩的,不过是单表查询,不是多表的,有空继续改进。
HTML页面,放的是几个搜索条件输入框
HTML页面,放的是几个搜索条件输入框
<?php class queryCondition { var $_fieldsTypes; var $_fields; public function queryCondition($fieldsTypes) { if ( is_array($fieldsTypes) ) { $this->_fieldsTypes = $fieldsTypes; } } public function getQueryWhere() { $arr = $this->_fields; if ( is_array($arr) ) { $totalQueryArr = array(); foreach ($arr as $fieldName => $value) { $queryArr = array(); if ( isset($this->_fieldsTypes[$fieldName]) ) { $type = $this->_fieldsTypes[$fieldName]; $quote = ''; if ( $type == 'string' ) { $quote = '"'; } if ( count($value['and']) > 0 ) { $str = $this->_getSubQueryWhere($fieldName, $value['and'], $quote, 1); // echo $str; if ( $str != '') { $queryArr[] = $str; } } if ( count($value['or']) > 0 ) { $str = $this->_getSubQueryWhere($fieldName, $value['or'], $quote, 2); if ( $str != '') { $queryArr[] = $str; } } if ( count($queryArr) > 0 ) { $queryJoin = (isset($value['join']) && $value['join'] != '') ? ' ' . strtoupper($value['join']) . ' ' : ' AND '; $totalQueryArr[] = implode($queryJoin, $queryArr); } } } if ( count($totalQueryArr) > 0 ) { return implode(' AND ', $totalQueryArr); } } return ''; } protected function _getSubQueryWhere ($fieldName, $subConditions, $quote, $wholeJoin = 1) { if ( $fieldName != '' && is_array($subConditions) && count($subConditions) > 0 ) { $sqlArr = array(); foreach ( $subConditions as $subCondition ) { if ( isset($subCondition['values']) && isset($subCondition['mark']) ) { $queryValues = $this->_resetFieldValues($subCondition['values'], $quote); $queryMark = $subCondition['mark']; $queryJoin = strtoupper($subCondition['join']); $markStr = $this->_getMarkStr($fieldName, $queryMark); if ( is_array($queryValues) ) { if ( $queryMark == 14 ) { if (count($queryValues) == 2) { $sqlArr[] = vsprintf($markStr, $queryValues); } else if (count($queryValues) > 2) { $sqlArr[] = vsprintf($markStr, array($queryValues[0], $queryValues[1])); } } else { $strArr = array(); foreach ( $queryValues as $singleValue ) { $strArr[] = vsprintf($markStr, $singleValue); } $sqlArr[] = implode(' ' . $queryJoin . ' ', $strArr); } } else if ( is_string($queryValues) ) { $sqlArr[] = vsprintf($markStr, $queryValues); } } } if ( count($sqlArr) > 0 ) { $wholeJoin = ( $wholeJoin == 1 ) ? ' AND ' : ' OR '; $query = implode($wholeJoin, $sqlArr); } return $query; } return ''; } /************************************************** * 文 件 名:QueryCondition.php * * 说 明:处理SQL查询语句里的查询条件 * * 作 者:lsf linda@vigoicu.com * * 创建时间:2009-3-27 * * parameters:$fieldName: string, DB table field name * $fieldValue: sting or array,values for searching * $queryMark: int, this is SQL query operator * 1: LIKE * 2: LIKE %% * 3: NOT LIKE * 4: = * 5: != * 6: REGEXP * 7: NOT REGEXP * 8: IS NULL * 9: IS NOT NULL * 10: > * 11: >= * 12: < * 13: <= * 14: BETWEEN * $queryJoin: string, 'and' 'or' you can choose how to join your multiple search condition * $andOr: int, assign array to which sub-array * 1: and * 2: or * $wholeQueryJoin: string, 'and' 'or' if both 'and sub-array' and 'or sub-array' have values, you can choose to use which relationship. ***************************************************/ public function setupFieldValueArray($fieldName, $fieldValue, $queryMark = 4, $queryJoin = 'and', $andOr = 1, $wholeQueryJoin = 'and') { $fieldName = trim($fieldName); $valueArr = $this->_getFieldValueMark($fieldValue, $queryMark, $queryJoin); if (strtolower($andOr) == 1) { $this->_setupAndArray($fieldName, $valueArr); } else { $this->_setupOrArray($fieldName, $valueArr); } $this->_setupWholeQueryJoin($fieldName, $wholeQueryJoin); } protected function _getMarkStr($fieldName, $queryMark) { if ( $fieldName != '' ) { $markStr = ''; switch ( $queryMark ) { case 1: $markStr = "LIKE %s"; break; case 2: $markStr = "LIKE %%s%"; break; case 3: $markStr = "NOT LIKE %s"; break; case 4: $markStr = "= %s"; break; case 5: $markStr = "!= %s"; break; case 6: $markStr = "REGEXP %s"; break; case 7: $markStr = "NOT REGEXP %s"; break; case 8: $markStr = "IS NULL"; break; case 9: $markStr = "IS NOT NULL"; break; case 10: $markStr = "> %s"; break; case 11: $markStr = ">= %s"; break; case 12: $markStr = "< %s"; break; case 13: $markStr = "<= %s"; break; case 14: $markStr = "BETWEEN %s AND %s"; break; default: break; } if ($markStr != '') { return $fieldName . ' ' . $markStr; } return ''; } } protected function _setupOrArray($fieldName, $arr) { $this->_fields[$fieldName]['or'][] = $arr; } protected function _setupAndArray($fieldName, $arr) { $this->_fields[$fieldName]['and'][] = $arr; } protected function _setupWholeQueryJoin($fieldName, $wholeQueryJoin) { $this->_fields[$fieldName]['join'] = $wholeQueryJoin; } protected function _getFieldValueMark($fieldValue, $queryMark, $queryJoin) { $fieldValue = $this->_resetFieldValues($fieldValue); return array( 'mark' => $queryMark, 'values' => $fieldValue, 'join' => $queryJoin, ); } protected function _resetFieldValues($values, $quote = '') { $tmpArr = array(); if ( is_string($values) && $values != '' ) { return $quote . $this->_h($values) . $quote; } else if ( is_array($values) && count($values) != 0 ) { foreach ($values as $k => $v) { if ($v != '') { $tmpArr[$k] = $quote . $this->_h($v) . $quote; } } return $tmpArr; } } protected function _h($text) { return trim(htmlspecialchars($text)); } public function getWholeArray() { // structure an array // // $arr[field_name] = array( // 'and' => array( // array( // 'mark'=>'=', // 'values'=>array('linda', 'get'), // 'join'=>'and' // ), // array( // 'mark'=>'=', // 'values'=>array('linda', 'get'), // 'join'=>'and' // ), // ), // 'or' => array(), // 'join'=>'', // ) return $this->_fields; } } ?>
相关文章推荐
- 黑马程序员_学习日记49_618数据库开发及ADO.Net(多条件搜索、case…when…语句、索引Index、子查询、分页、Join语句)
- 利用PHP访问数据库_实现分页功能与多条件查询功能的示例
- 全自定义功能sql搜索查询datagridview 牛多条件查询的asp.net实现!
- 一个数据库查询方法(可以动态设置查询参数,设置查询条件),很巧妙的组合sql语句
- 数据库查询语句 动态加入查询条件 不区分大小写
- 初学php遇见的查询数据库语句出错问题占内存
- linq字符串搜索条件,排序条件-linq动态查询语句 Dynamic LINQ
- 精通数据库SQL——复杂搜索条件查询
- THINKPHP 数据库查询where语句条件
- php 搜索(查询)功能
- 巧用数据库SQL语句的“连接查询”功能
- 分析一个字符串生成相关查询条件,比如搜索相关文章的功能
- Qt使用QSqlTableModel执行SQL语句,QLineEdit输入查询条件完成查询功能
- PHP实现多个关键词搜索查询功能示例
- Hibernate_根据条件动态组装sql/hql语句(仿ibatis动态查询语句功能)
- PHP查询数据库中满足条件的记录条数(二种实现方法)
- PHP多条件搜索之后,对搜索集进行分页设置,避免了点击“上一页”或“下一页”后出现不是所要查询的内容
- 数据库条件查询语句
- php根据查询条件拼接sql语句
- PHP查询数据库中满足条件的记录条数(两种实现方法)