Поиск строки целиком

ByLex

Новичок
Всем привет. Есть самописный движок. Есть файл отвечающий за поиск search.php. Есть артикул товара, например 12a2hr-12 и есть артикул 12a2hr-25. При поиске выдает два результата. И тот и тот. Как делать поиск строки целиком? Т.е.е если я ввел 12a2hr-12, то и результат выдачи был соответственно один 12a2hr-12. Товаров много и у всех похожий артикул....и в выдаче идет куча похожих товаров...Необходимо реализовать поиск строки целиком. Но сделать не могу. За поиск артикула товара отвечает type1, здесь и прописывается артикул товара в базе mysql. Подскажите пожалуйста. Помогите дописать поиск. Спасибо.

PHP:
<?php

function print_cat_path($id) {
	$res = mysql_query("select idp,path from grandi_catalog where id = '$id'");
	while (list($idp, $path) = mysql_fetch_array($res)) {
		if ($path) {
			$pth = $path."/".$pth;
		}
		else {
			$pth = $id."/".$pth;
		}
		$res = mysql_query("select idp,path from grandi_catalog where id = '$idp'");
	}
	return $pth;
}

?>

<table width="100%">

<?php
if (issets($str)) {
	$str = trim($str);
	$all_counter = 0;
	$sql = '( SELECT 1, isprod, id, name, concat( string1, string2, string3, string4, string5, string6, string7, string8, string6, string10 ) , concat( text1 ) , '
	. ' MATCH ( name, string1, string2, string3, string4, string5, string6, string7, string8, string6, string10, text1 )'
	. ' AGAINST ( \'+'.str_replace(' ', '* +', $str).'*\''
	. ' IN BOOLEAN'
	. ' MODE ) AS sort'
	. ' FROM grandi_catalog'
	. ' WHERE MATCH ( name, type1, string1, string2, string3, string4, string5, string6, string7, string8, string6, string10, text1 )'       
	. ' AGAINST ( \'+'.str_replace(' ', '* +', $str).'*\''
	. ' IN BOOLEAN'
	. ' MODE )
    and hide != 1
    '
	. ' GROUP BY name )'
	;
	$result = mysql_query($sql);

	$j = 1;
	while (list($num,$isprod,$id,$name,$info,$text)=@mysql_fetch_array($result)) {
		if ($num == 1){
			$link = "/".print_cat_path($id);
		}
		else if($num == 2){
			$link = "/".$info."/";
		}
		else if($num == 3) {
			if ($isprod == 1) {
				$link = "/news/".$id."/";
			}
		}
		?>
		
		<tr>
			<td valign="top"><strong>&nbsp;<?= sprintf("%02d", $j) ?>&nbsp;</strong></td>
			<td valign="top" width="100%">
			
			<?php
			if ($info || $num != 2) {
				echo "<a href=\"".$link."\">".eregi_replace($str, "<font color='#00214C'>".$str."</font>", $name)."</a><br>";
			}
			while(ereg("&nbsp;&nbsp;",$text)){
				$text = ereg_replace("&nbsp;&nbsp;","&nbsp;",$text);
			}
			$text = ereg_replace("&nbsp;"," ",$text);
			$text = explode(" ",brp_repl($text));
			$string = "";
			for($f=0; $f%10 != 9 and isset($text[$f]); $f++) $string .= $text[$f]." ";
			while($string){
				if(eregi($str,$string)){
					$tmp .= '...'.eregi_replace($str,"<font color='#00214C'>".$str."</font>",$string).'...';
				}
				if($tmp) print $tmp."<br>";
				$tmp = "";
				$string = "";
				if($text[$f]) $string = $text[$f]." ";
				$f++;
				for( ; $f%10 != 9 and isset($text[$f]); $f++) $string .= $text[$f]." ";
			}
			?>
			<a href="<?=$link?>">http://<?= $HTTP_HOST.$link?></a>
			</td>
			
		</tr>
		<tr><td colspan="2">&nbsp;</td></tr>
		
		<?php
		$j++;
	}
	
	$part_old = $part;
	$j++;
	
	$all_counter = $all_counter + $j;
	if ($all_counter == 2) {
	?>
	
	<tr><td colspan="2" align="center">По Вашему запросу ничего не найдено. Попробуйте сформулировать свой запрос по-другому.</td></tr>
	
	<?php
	}
	?>

<?php
}
?>
			
</table>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Не использовать fulltext?
 

ByLex

Новичок
А пример можно? Смысл в том что при поиске, артикла 123112-240 и 123112-348, скрипт почему то обрезает до тире и выдает в результатах два продукта, так как обрезается до тире..и получается как будто мы ищем продукты с артиклем 123112, остальное он не учитывает...почему не знаю и как исправить тоже. В таблице есть type1, там и прописан артикл товара.
 
Сверху