веб-мастеру блог веб-мастера Статьи Веб-Мастера SEO Tools книги веб-мастеру

IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> MySQL поиск по базе, Вопрос организации поиска по нескольким словам
Cybermystic
сообщение 8.9.2007, 12:57
Сообщение #1


Прохожий
*

Группа: Пользователи
Сообщений: 4
Регистрация: 31.8.2007
Пользователь №: 205



С мускулем знаком около месяца, да и в РНР далеко не виртуоз. Поэтому вспотыкаюсь на каждом шагу. Возникла проблема организации грамотного однотабличного поиска. Кое-какие наработки есть:
Код
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, 15:36
Сообщение #2


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 623
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



Разрешон ли полнотекстовый поиск по данному полю? Если да, то то можно попробовать убрать " 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, 16:38
Сообщение #3


Прохожий
*

Группа: Пользователи
Сообщений: 4
Регистрация: 31.8.2007
Пользователь №: 205



gid, огромное спасибо за поддержку. Скажи мне плз, почему вылезает ошибка: Parse error: parse error, unexpected $end in ...................... on line 54 (54 - последняя строка скрипта, там (/html)),
она постоянный спутник моих экспериментов...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
gid
сообщение 9.9.2007, 16:46
Сообщение #4


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 623
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



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

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


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cybermystic
сообщение 9.9.2007, 17:37
Сообщение #5


Прохожий
*

Группа: Пользователи
Сообщений: 4
Регистрация: 31.8.2007
Пользователь №: 205



Спасибищееее огромное, biggrin.gif все заработало, там "}" не хватало, но не
Цитата(gid @ 9.9.2007, 14:46) *

перед строкой, на которую указывает ошибка...
а в том фрагменте... Теперь буду думать, как реализовать подсветку искомых слов.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Быстрый ответОтветить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 8.8.2008, 8:21
^ ВВЕРХ ^

Посетите наши проекты:
Бодибилдинг.info - арнольд шварцнегер культуризм

Бодибилдинг.info - единоборства