| веб-мастеру | блог веб-мастера | Статьи Веб-Мастера | SEO Tools | книги веб-мастеру |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| 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%'"; Во втором случае поиск будет медленный и несовсем хороший, т.к. слова из запроса должны будут идти в тексте последовательно, так же как в запросе... -------------------- Хочу жить на о.Самуи
Раскрутка Вашего сайта | Пишу php скрипты на заказ | Регистрация Вашего сайта в каталогах |__| RU-домены за 170 рублей |__| SU-домены за 460 рублей |__| | - | - | - | ICQ: 6-426-630 |
| 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 Где то нехватает закрывающей скобки "}" или ";", во всех примерах, я про них забыл -------------------- Хочу жить на о.Самуи
Раскрутка Вашего сайта | Пишу php скрипты на заказ | Регистрация Вашего сайта в каталогах |__| RU-домены за 170 рублей |__| SU-домены за 460 рублей |__| | - | - | - | ICQ: 6-426-630 |
| Cybermystic |
9.9.2007, 17:37
Сообщение
#5
|
|
Прохожий ![]() Группа: Пользователи Сообщений: 4 Регистрация: 31.8.2007 Пользователь №: 205 |
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 8.8.2008, 8:21 |