Автор: 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
Где то нехватает закрывающей скобки "}" или ";", во всех примерах, я про них забыл

. Обычно нехватает "}" или ";" перед строкой, на которую указывает ошибка...
Автор: Cybermystic 9.9.2007, 16:37
Спасибищееее огромное,
все заработало, там "}" не хватало, но не
Цитата(gid @ 9.9.2007, 14:46)

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