1. 程式人生 > >php單表多欄位多關鍵字搜尋的類適用於小型網站和後臺

php單表多欄位多關鍵字搜尋的類適用於小型網站和後臺

這裡發一個自己寫的php搜尋的類,資料表龐大的話當然是不適合用這個的,會比較慢,但是對於很多地方還是適用的,並且查詢到的結果,其關鍵字可以高亮顯示

/*
 這是一個多關鍵字多欄位單表搜尋的類
  * 張偉2012-09-23  qq:3340971
  */
 class Search{
 	private $host='localhost';
 	private $user='root';
 	private $pwd='123456';
 	private $conn;
 	private $dbname='hshb2c_com';
 	private $charset='utf8';
 	public $tips='';//提示資訊
 	public static $limit="/[\+&\s]+/";//分割符號
 	public static $arrKey=array();
 	private static $instance;
 	public static function getInstance(){
 		if(!self::$instance instanceof self){
 			self::$instance=new self();
 		}
 		return self::$instance;
 	}
 	private function __construct(){
 		date_default_timezone_set('Asia/Shanghai');
 		$this->
[email protected]
_connect($this->host,$this->user,$this->pwd); if(!$this->conn){ $this->tips='資料庫連線失敗!'.mysql_error(); return false; } mysql_query("SET NAMES '{$this->charset}'"); mysql_query("SET CHARACTER_SET_CLIENT='{$this->charset}'"); mysql_query("SET CHARACTER_SET_RESULTS='{$this->charset}'"); if(!mysql_select_db($this->dbname,$this->conn)){ $this->tips='不存在資料庫:'.$this->dbname.',請核對後再試!'.mysql_error(); return false; } } /*執行單表查詢並返回結果(二維陣列) *$str:http提交的要查詢的字串 */ public function query($str,$tbname,$arrSearchField,$arrShowField){ $str=self::createLike($str,$arrSearchField); foreach(self::$arrKey as $v){ $arrReplaceField[]='<font color="red">'.$v.'</font>'; } $list_field=implode("`,`",$arrShowField); $list_field="`$list_field`"; $sql="SELECT $list_field FROM `$tbname` WHERE $str"; $result=mysql_query($sql,$this->conn); $num=mysql_num_rows($result); $item=array(); $num_field=count($arrShowField); if($num!=0){ $i=0; while($row=mysql_fetch_assoc($result)){ for($j=0;$j<$num_field;$j++){ if(in_array($arrShowField[$j],$arrSearchField)){ $fieldValue=str_replace(self::$arrKey,$arrReplaceField,$row[$arrShowField[$j]]); }else{ $fieldValue=$row[$arrShowField[$j]]; } $item[$i][$arrShowField[$j]]=$fieldValue; } $i++; } return $item; }else{ return false; } } //生成多個欄位的like查詢條件 public static function createLike($str,$arrSearchField){ self::$arrKey=preg_split(self::$limit,$str); $strLike=""; foreach($arrSearchField as $v1){ foreach(self::$arrKey as $v2){ $strLike.="`$v1` LIKE '%$v2%' OR "; } } return substr($strLike,0,-4); } }


相關推薦

php關鍵字搜尋適用小型網站後臺

這裡發一個自己寫的php搜尋的類,資料表龐大的話當然是不適合用這個的,會比較慢,但是對於很多地方還是適用的,並且查詢到的結果,其關鍵字可以高亮顯示 /* 這是一個多關鍵字多欄位單表搜尋的類 * 張偉2012-09-23 qq:3340971 */ class

php mysql ajax 關鍵詞查詢

單表多欄位查詢在一些稍微複雜一點的查詢中十分有用。本文主要利用MySQL資料庫中的concat函式實現單表多欄位多關鍵詞查詢。並且顯示查詢結果的表格可根據所選資料表動態生成。 html程式碼 <!DOCTYPE html> <html> <h

對webuploader二次封裝,實現圖片上傳!

     由於公司專案使用到了這個功能,而我在百度谷歌都無法找到相應的外掛,所以決定自己封裝一個外掛來實現。由於博主是後端開發人員,對前端的jq不熟悉,踩了很多坑才完成。 只需要給指定的div指定方法即可。 前後的東西已經封裝好了。

SQLSERVER查詢自動生成JavaBean

根據表字段,型別,註釋,自動生JavaBean,簡化開發; 注意以下幾點: 1.sqlserver中生成的結果用文字顯示: 2.最後貼上到程式碼中,Ctrl+Shift+F進行格式化; 3.java中可通過程式碼生成get,set方法:程式碼中右鍵》Source=>G

TP---讓資料自增(適用在原來的基礎上新增數量)

廢話不過說直接上程式碼: //setInc第一個引數為欄位名,第二個引數為自增數量 $table=new Table(); $table->where('id',1)->setInc('money',100); 這句話的意思是查詢id為1的資訊,把欄位money自增

oracle全文索引_按照關鍵字的匹配度排序

在網上看到oracle全文索引都是對一張表一個欄位進行全文檢索,我想對多個表多個欄位按照關鍵字的匹配度排序,sql語句如下 select score(1)  ,score(2), CDA.AREANAME,CDS.STREETNAME from  C_DICT_STREE

mysql 模糊查詢解決方法

例如:user表中有id,name,age 三個欄位,然後根據使用者輸入的查詢請求,將輸入的字串通過空格分割為多個關鍵字,再在這三個欄位中查詢包含這些關鍵字的記錄。 可目前遇到的問題是,這些關鍵字是可

Linq中的group by

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

mysql【同資料庫的操作】

一 令人窒息的CONCAT(str1,str2,…) 我只蹭蹭不進去 更新 SELECT CONCAT('update ‘,table_name,’ set 欄位名= 值; ') FROM information_schema.tables WHERE table_s

mysql搜尋模糊查詢

select parttime_job_business_assessments.*, u.nick_name, u.mobile, pj.name as job_name, b.name as business_name from `parttime_job_business_assess

php進行2維陣列排名方法

一些專案中會出現這種情況,在使用者充值後進行排名(所謂的土豪榜,直播平臺常見)。從資料庫查出的是一個二維陣列,要根據充值數量的大小且使用者標識(uid)不能去除。一般的演算法也就是給一個簡單的一維陣列進行大小比較從而進行排序。想保留使用者標識是很難的。這裡告訴大家一個方法可以實現通過數量大小給排名且

mysql單一個id組成的字串,查詢方法

借鑑:mysql使用instr達到in(字串)的效果 結論:select * from 表名where INSTR(CONCAT(字串),CONCAT(表id)) 問題來源:一表中的某欄位是另一表的外

簡單查詢資料庫,減輕及資料庫壓力

最近在查詢標籤收費記錄時,要在列表中顯示車牌號資訊,而車牌號資訊在標籤資訊記錄表中,於是需要查詢標籤資訊記錄,最原始的做法: 獲取分頁的一頁記錄資料,迴圈遍歷得出標籤收費記錄物件,然後通過標籤收費記錄中的標籤ID來查詢標籤資訊物件,儲存在List物件中: List v

sql 將‘1,2,3,4’轉成相應的分隔值函式,一行變行,

再設計表的時候我們經常遇到這樣的情況,欄位的值為1,2,3,4 等字元隔開的情況,存的是數字,但是顯示的時候是對應的類別,直接上圖,清楚明瞭, 如何想得到 分兩步完成,步驟如下: 第一步先創造 一個表值函式,將1,2,3,4 轉化為 函式是從網上找來的,程式碼如下:

YII2 關聯ar查詢副

一對多 a表 id  status 1       1 b表 id  income  aid 1     1000      1 2    &nb

mysql一個個值關聯另一張

    A表的id欄位是以'1,2,3,4,5'...這樣的形式存的,它關聯字典表B的id欄位,此時需求是要查出name   SQL: SELECT a.id, ( SELECT GRO

資料庫相同的統一更新(儲存過程)

開發中遇到多個表要設定區域REGIONCODE這個欄位的更新,所以寫了這個儲存過程統一處理CREATE PROCEDURE [dbo].[Sp_RegionCode_SD_value] AS DECLARE @tableName VARCHAR(100)

Hibernate原生SQL查詢名重複問題

Hibernate原生SQL查詢多表關聯,SQL語句要注意的問題 @for&ever 2009-9-4 系統環境: MySQL5.1 Hibernate3.3 有如下的假定: 實體類 Question 和 Answer分別對應資料表 question 和answ

兩個之間的匹配!

  /* 一個專案中涉及到問題: 歷史工資資料中的員工資訊與最新的員工資訊之間存在差異, 需要對歷史資料到進行匹配後,才能進行匯入*/ --建立測試環境Declare @A Table( ID Int, Name varchar(10)) Declare @B Table( 

oracle儲存過程將某張一個值分開成條資料插入到一張新

create or replace PROCEDURE PRO_MANDATESCOPE (dataid in varchar2,tablename in varchar2 ) AS