|
|
|
| Всем здравствуйте.
Как можно осуществить поиск по полю с возможностью перестановки слов.
т.е. например имеем запись: сидоров иван александрович
нужно что бы она находилась по "сидоров иван александрович", "иван александрович сидоров", "александрович иван сидоров" и т.п. и вообще возможен ли такой поиск. понимаю, что нужно использовать REGEXP, но дальше этого мысль не уходит
p.s.
поиск без перестановки слов средствами пхп
Спасибо. | |
|
|
|
|
|
|
|
для: trancecom
(25.04.2007 в 16:31)
| | если поиск средствами php - при чем тут mysql? | |
|
|
|
|
|
|
|
для: Trianon
(25.04.2007 в 16:50)
| | Поиск средствами mysql. т.е. весь поиск в запросе | |
|
|
|
|
|
|
|
для: trancecom
(26.04.2007 в 13:19)
| | Конкретно для Ф.И.О я бы просто перечислил все реальные варианты
<?
$nf = 'Сидоров';
$ni = 'Иван';
$no = 'Александрович';
$nf = mysql_escape_string($nf);
$ni = mysql_escape_string($ni);
$no = mysql_escape_string($no);
$ni1 = $ni[0];
$no1 = $no[0];
$opts = array();
$opts[] = "$ni $nf";
$opts[] = "$nf $ni";
$opts[] = "$ni $no $nf";
$opts[] = "$nf $ni1.$no1.";
$opts[] = "$ni1.$no1.$nf";
foreach($opts as $k => $v)
$opts[$k] = "\r\n field LIKE '%$v%'";
$cond= implode(' OR ', $opts);
$sql = "SELECT * FROM tab WHERE $cond";
echo "<pre>$sql</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: trancecom
(25.04.2007 в 16:31)
| | Лучше использовать полнотекстовый поиск - он автоматически осуществляет такой поиск. Кроме того, фразу можно разбить на слова и для каждого слова формировать отдельные условия, которые объединять при помощи операторов and или or. | |
|
|
|