|
|
|
| подскажите пожалуйста как построена логика поиска:
вводим в поле, например, фразу ааа ббб ввв, и выборка вернет искомую строку из БД и при ааа ббб ввв и при ббб ааа ввв и при ввв ааа ббб - тоесть любом чередование двух, трех и более слов из запроса.
видел на сайте, выдает точно нужную позицию, то есть при поиске, например 'большой красный мяч' - выдаст именно строку с этим содержанием и проигнорирует строку 'большой зеленый мяч'.... | |
|
|
|
|
|
|
|
для: moonfox
(10.08.2009 в 19:24)
| |
<?php
WHERE poisk='$slova'
?>
|
| |
|
|
|
|
|
|
|
для: t3ma
(10.08.2009 в 19:32)
| | так будет искать только жестко введенную строку и при перестановке местами слов не выдаст результата. | |
|
|
|
|
|
|
|
для: moonfox
(10.08.2009 в 19:40)
| |
<?php
WHERE poisk='%$slova%'
?>
|
| |
|
|
|
|
|
|
|
для: t3ma
(10.08.2009 в 20:02)
| | вот что я на писал
<?
function massive($lang, $st)
{
$in = addslashes($st);
$sh = 0;
$str = explode(' ', $in);
for($x = 0; $x < count($str); $x ++)
{
$l = strlen($str[$x]);
if($l > 2)
{
$res = mysql_query('SELECT `id`, `title_'.$lang.'`, `content_'.$lang.'` FROM `catalog`
WHERE `title_'.$lang.'` LIKE "%'.trim($str[$x]).'%"');
while($m = mysql_fetch_array($res))
{
$this->out[$sh]['title'] = $m[1];
$this->out[$sh]['text'] = stripslashes($m[2]);
$this->out[$sh]['id'] = $m['id'];
$this->out[$sh]['sort'] = substr_count(strtolower($m[2]),strtolower($str[$x]));
$sh++;
}
}
}
function compare($a, $b)
{
return ($a['sort'] > $b['sort']) ? -1 : 1;
}
if(is_array($this->out))
{
usort($this->out, 'compare');
return $this->out;
}
//print_r($this->out);
}
?>
|
| |
|
|
|
|
|
|
|
для: moonfox
(10.08.2009 в 20:14)
| | выглядет ужасающе) | |
|
|
|
|
|
|
|
для: moonfox
(10.08.2009 в 19:24)
| | Обычно в таких ситуациях применяют полнотекстовый поиск.
Либо разбирают поисковый запрос на слова, а затем из слов составляют сложное выражение через операцию AND | |
|
|
|
|
|
|
|
|
для: nikita2206
(11.08.2009 в 00:07)
| | знаем про это. у меня 3 буквы, много.
да спасибо разобрался, вот так запрос формирую
<?
function massive($lang, $st)
{
$in = addslashes($st);
$sh = 0;
$str = explode(' ', $in);
if(count($str) > 1)
{
for($test = 1; $test < count($str); $test ++)
$add = ' && `title_'.$lang.'` LIKE "%'.trim($str[$test]).'%"';
}
$res = mysql_query('SELECT `id`, `title_'.$lang.'`, `content_'.$lang.'` FROM `catalog`
WHERE `title_'.$lang.'` LIKE "%'.trim($str[0]).'%"'.$add);
for($x = 0; $x < count($str); $x ++)
{
$l = strlen($str[$x]);
if($l > 2)
{
while($m = mysql_fetch_array($res))
{
$this->out[$sh]['id'] = $m['id'];
$this->out[$sh]['title'] = $m[1];
$this->out[$sh]['text'] = stripslashes($m[2]);
$this->out[$sh]['sort'] = substr_count(strtolower($m[2]),strtolower($str[$x]));
$sh++;
}
}
}
function compare($a, $b)
{
return ($a['sort'] > $b['sort']) ? -1 : 1;
}
if(is_array($this->out))
{
usort($this->out, 'compare');
return $this->out;
}
//print_r($this->out);
}
?>
|
| |
|
|
|
|
|
|
|
для: moonfox
(11.08.2009 в 01:45)
| |
Здесь ничего не напутали? | |
|
|
|
|
|
|
|
для: Trianon
(11.08.2009 в 01:48)
| | точку пропустил ) | |
|
|
|