Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум веб-мастеров _ Базы данных (MySQL, PostgreSQL, ODBC, ...) _ MySQL поиск по базе

Автор: Cybermystic 8.9.2007, 11:57

С мускулем знаком около месяца, да и в РНР далеко не виртуоз. Поэтому вспотыкаюсь на каждом шагу. Возникла проблема организации грамотного однотабличного поиска. Кое-какие наработки есть:

Код
if ($request) {
$k = split(" ", $request);
$num_keywords = count($k);
for ($i=0; $i<$num_keywords; $i++) {
$k_string = "+".$k[$i]."* "; }
$and = "$k_string"; }
$query = "SELECT * FROM list WHERE MATCH (PRODUCT) AGAINST ('$and' IN BOOLEAN MODE)";

Теперь проблемы:
1. Данный подход не решает проблемы коротких (менее 4-х символов) ключевых слов (которые должны безобидно игнориться), более того, если в запросе присутствуют короткие слова (напр. core 2 duo), то игнорится строка их содержащая.
2. Какими средствами можно выделить искомые слова в списке результатов запроса?

Автор: gid 8.9.2007, 14:36

Разрешон ли полнотекстовый поиск по данному полю? Если да, то то можно попробовать убрать " IN BOOLEAN MODE", если не это не даст результатов, то вот другой вариант:

Код

if ($request)
{
$arr = array();
$tmp_a = explode(" ", $request); // так быстрее
foreach($tmp_a as $val) // так проще, чем for()
{
    if (strlen(trim($val))>2) $arr[] = $val; // сами отметаем лишнее
}
$and = implode(" ", $arr);
$and = ereg_replace("( +)", " ", trim($and));

$query = "SELECT * FROM list WHERE MATCH (PRODUCT) AGAINST ('$and' IN BOOLEAN MODE)";

или так:
Код

if ($request)
{
$arr = array();
$tmp_a = explode(" ", $request); // так быстрее
foreach($tmp_a as $val) // так проще, чем for()
{
    if (strlen(trim($val))>2) $arr[] = $val; // сами отметаем лишнее
}
$and = implode(" ", $arr);
$and = ereg_replace("( +)", " ", trim($and));
$and = str_replace(" ", "%", trim($and));

$query = "SELECT * FROM list WHERE `PRODUCT` LIKE '%$and%'";


Во втором случае поиск будет медленный и несовсем хороший, т.к. слова из запроса должны будут идти в тексте последовательно, так же как в запросе...

Автор: Cybermystic 9.9.2007, 15:38

gid, огромное спасибо за поддержку. Скажи мне плз, почему вылезает ошибка: Parse error: parse error, unexpected $end in ...................... on line 54 (54 - последняя строка скрипта, там (/html)),
она постоянный спутник моих экспериментов...

Автор: gid 9.9.2007, 15:46

Цитата
Parse error: parse error, unexpected $end in ...................... on line 54

Где то нехватает закрывающей скобки "}" или ";", во всех примерах, я про них забыл smile.gif . Обычно нехватает "}" или ";" перед строкой, на которую указывает ошибка...

Автор: Cybermystic 9.9.2007, 16:37

Спасибищееее огромное, biggrin.gif все заработало, там "}" не хватало, но не

Цитата(gid @ 9.9.2007, 14:46) *

перед строкой, на которую указывает ошибка...
а в том фрагменте... Теперь буду думать, как реализовать подсветку искомых слов.

Invision Power Board ()
© Invision Power Services ()