Location: PHPKode > projects > ChiCoMaS - Chilek CMS > chicomas/objects/obj_search.php
<?
#############################################################
#
# -=[ MySQL Search Class ]=-
#
#      version 1.5
#
# (c) 2002 Stephen Bartholomew
#
# Functionality to search through a MySQL database, across
# all columns, for multiple keywords
#
# Usage:
#
#    Required:
#        $mysearch = new MysqlSearch;
#        $mysearch->setidentifier("MyPrimaryKey");
#        $mysearch->settable("MyTable");
#        $results_array = $mysearch->find($mysearchterms);
#
#    Optional:
#        This will force the columns that are searched
#        $mysearch->setsearchcolumns("Name, Description");
#        $mysearch->setwhere("WHERE id=1");
#
#             Set the ORDER BY attribute for SQL query
#            $mysearch->setorderby("Name"); 
#
##############################################################

class MysqlSearch
{
	function find($keywords){

		$obj_tempdbarray = new CTempDBArray();
		$obj_tempdbengine = new CTempDBEngine();

		# Create a keywords array
		$keywords_array = explode(" ",$keywords);

		# Select data query
		if(!$this->searchcolumns){
			$this->searchcolumns = "*";
			$search_data_sql = "SELECT ".$this->searchcolumns." FROM ".$this->table;
		}
		else{
			$search_data_sql = "SELECT ".$this->entry_identifier.",".$this->searchcolumns." FROM ".$this->table;
		}
		if ($this->where_data_sql!=null)
			$search_data_sql .= " ".$this->where_data_sql;

		$obj_tempdbarray = $obj_tempdbengine->GetRows($search_data_sql);

		# Define $search_results_array, ready for population
		# with refined results
		$search_results_array = array();

		while( $all_data_array = $obj_tempdbarray->get() ){
			$my_ident = $all_data_array[$this->entry_identifier];

			# Cycle each value in the product entry
			foreach($all_data_array as $entry_key=>$entry_value){
				# Cycle each keyword in the keywords_array
				foreach($keywords_array as $keyword){
					# If the keyword exists...
					if($keyword){
						# Check if the entry_value contains the keyword
						if(stristr($entry_value,$keyword)){
							# If it does, increment the keywords_found_[keyword] array value
							# This array can also be used for relevence results
							$keywords_found_array[$keyword]++;
						}
					}
					else{
						# This is a fix for when a user enters a keyword with a space
						# after it.  The trailing space will cause a NULL value to
						# be entered into the array and will not be found.  If there
						# is a NULL value, we increment the keywords_found value anyway.
						$keywords_found_array[$keyword]++;
					}
				unset($keyword);
				}

				# Now we compare the value of $keywords_found against
				# the number of elements in the keywords array.
				# If the values do not match, then the entry does not
				# contain all keywords so do not show it.
				if(sizeof($keywords_found_array) == sizeof($keywords_array)){
					# If the entry contains the keywords, push the identifier onto an
					# results array, then break out of the loop.  We're not searching for relevence,
					# only the existence of the keywords, therefore we no longer need to continue searching
					array_push($search_results_array,"$my_ident");
					break;
				}
			}
		unset($keywords_found_array);
		unset($entry_key);
		unset($entry_value);
		}

		$this->numresults = sizeof($search_results_array);
		# Return the results array
		return $search_results_array;
    }

	function setidentifier($entry_identifier){
		# Set the db entry identifier
		# This is the column that the user wants returned in
		# their results array.  Generally this should be the
		# primary key of the table.
		$this->entry_identifier = $entry_identifier;
	}

	function settable($table){
		# Set which table we are searching
		$this->table = $table;
	}

	function setsearchcolumns($columns){
		$this->searchcolumns = $columns;
	}

	function setwhere($where_data_sql){
		$this->where_data_sql = $where_data_sql;
	}



}

class CSearchDBEngine {
	function SearchResults($identifier, $table, $columns, $mysearchterms, $where_data_sql) {
		$o_dataaccess = new CDataAccess();
		return $o_dataaccess->SearchResults($identifier, $table, $columns, $mysearchterms, $where_data_sql);
	}
}
?>


Return current item: ChiCoMaS - Chilek CMS