Ci sono alternative che restituiscono lo stesso risultato ma che magari sono piu' semplici o veloci ???

Solo una curiosita' , io ho provato questa e come risultato non e' male ...

codice:

<?php // 4
// supponiamo di avere un database di nome database con una tabella table
// che contiene id e name , dove name e' il nome di qualcuno o di qualcosa ...


// CONNESSIONE AL DATABASE
	$db = mysql_connect( 'localhost', 'root', '' );
	mysql_select_db( 'database' );


// IMPOSTAZIONI RICERCA

	// CHIAVE DA CERCARE
        $search = "test";
	
	// PRECISIONE NELLA RICERCA ( 1 bassissima, 10 abbastanza elevata elevata )
        // [ comunque da len $search in su il risultato e' identico ... ]
	$searchPrecision  = 1;
	
	// LIMITE RISCONTRI DA MOSTRARE
	$limitmatches = 10;
	

// INIZIO PROGRAMMA

	// VARIABILE CONTENENTE PARTE DELLA QUERY
	$search4query = "";
	
	// IN BASE ALLA PRECISIONE SCELTA ...
	for( $a = 0, $b = strlen( $search ); $a < $b; $a += $searchPrecision ) {
		// DIVIDO LA CHIAVE DI RICERCA E FACCIO L' ESCAPE
		$tempstr = mysql_escape_string( substr( $search, $a, $searchPrecision ) );
		// ACCODO ALLA VARIABILE nometabella LIKE '%valore%' OR
		$search4query .= "name LIKE '%{$tempstr}%' OR ";
	}
	// ELIMINO ULTIMO ' OR' DALLA QUERY E LA CREO PER ESTESO
	$search4query = "SELECT id, name FROM table WHERE ".substr( $search4query, 0, -3 );
	
	// ESEGUO LA QUERY
	$dbQuery = mysql_unbuffered_query( $search4query );
	
	// VARIABILE CONTENENTE I RISULTATI
	$matchresult = Array();

	// CICLO LA QUERY APPENA FATTA
	while( $dbQuery && $result = mysql_fetch_row( $dbQuery ) ) {
		// CALCOLO IL levenshtein TRA MATCH E CHIAVE DI RICERCA
		$lev = levenshtein( $result[1], $search );
		// SE E' ALMENO COMPRESO TRA 0 E 255 ...
		if( $lev >= 0 ) {
			// CONTROLLO CHE LA CHIAVE NON SIA IDENTICA O DENTRO IL RISULTATO ...
			if( $lev > 0 && strpos( $result[1], $search ) !== false ) {
				// PERCHE' SE COSI' E' , IMPOSTO NON A ZERO MA ALMENO A
				// UNO QUESTA RIGA COSI' DA PILOTARE I RISCONTRI
				// DEL levenshtein PONENDO ALMENO AD 1 TUTTI I
				// RISULTATI CONTENENTI TALE CHIAVE
				$lev = 1;
			}
			// SETTO L' ARRAY QUALORA NON FOSSE ESISTENTE
			if( isSet( $matchresult[$lev] ) == false ) {
				$matchresult[$lev] = Array();
			}
			// AGGIUNGO VALORI IN POSIZIONE ARRAY[$lev]
			// COSI' DA POTERLI ORDINARE POI ...
			array_push(
				$matchresult[$lev],
				Array(
					'id'=>$result[0],
					'value'=>$result[1],
					'match'=>$lev
				)
			);
		}
	}


	// SE HO OTTENUTO ALMENO UN RISULTATO
	if( count( $matchresult ) > 0 ) {
		
		// RIORDINO PER CHIAVI L' ARRAY E LO RESETTO
		ksort( $matchresult );
		reset( $matchresult );
		
		// VARIABILE DI OUTPUT
		$output = "";
		// VARIABILE DI CONTROLLO RISULTATI
		$templimit = 0;
		
		// PER OGNI CHIAVE DELL' ARRAY ORDINATO IN ORDINE CRESCENTE ...
		foreach( $matchresult as $value ) {
			// LEGGO TUTTI GLI ARRAY INTERNI ...
			for( $a = 0, $b = count( $value ); $a < $b; $a++ ) {
				// SE SONO OLTRE IL LIMITE MASSIMO DI RISULTATI
				if( $templimit >= $limitmatches ) {
					// BLOCCO QUESTO FOR
					$a = $b;
					// break ? .... volendo si
				}
				// ALTRIMENTI AGGIUNGO AD OUTPUT I DATI INTERESSATI
				else {
					$output .= "
					Match: {$value[$a]['match']}

					Id: {$value[$a]['id']}

					Testo: {$value[$a]['value']}<hr />
					";
					
					// INCREMENTO LA VARIABILE DI CONTRLLO MAX RISULTATI
					$templimit++;
				}
			}
		}
		
		// STAMPO L' OUTPUT
		echo $output;
	}


	// CHIUDO IL DATABASE
	mysql_close( $db );
?>