Проект Мобильный Офис Проект Мобильный Офис

на главную

Поиск по сайту

Поиск:

Поиск по сайту





Поиск по сайту

Искать:
        с учетом регистра
'; if (!empty ($_GET['sw'])) { //**************************************************************************** // ****************** обработка запроса $sw = substr ($sw, 0, 70); // обрезаем запрос до 70 символов $sw = preg_replace ("/[^-%\wчЧ]/", " ", $sw); // заменяем пробелами все, кроме букв, цифр, - и % $sw .= " "; // добавили пробел в конце $sw = " " . $sw; // ... и в начале (это надо для отлова коротких слов в начале и конце запроса) if (isset ($l) and $l != "all") // если ищут фразу, не надо убирать короткие слова { $sw = preg_replace ("/ [-%\w]{1,1} /", " ", $sw); // убираем слова короче букв } //$sw = preg_replace ("/ [-%\w]{1,1} /", " ", $sw); // убираем слова короче букв $sw = preg_replace ("/ +/", " ", $sw); // убираем двойные пробелы $sw = trim ($sw); if (strlen ($sw) < 2 or !preg_match ("/\w/", $sw)) { print "

Слишком короткий или пустой запрос!"; } else { //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //include ("../incl/mysql_ac"); $MySQLhost="localhost"; $MySQLuser="mocomua"; $MySQLpass="pluh35s"; $MySQLdb="mo_com_ua"; @$link = mysql_connect($MySQLhost, $MySQLuser, $MySQLpass) or die ("Could not connect
"); mysql_select_db ($MySQLdb) or die ("Could not select database
"); // --------------------------------------------------------------------------------- // ****************** с учетом регистра или без if (isset ($bin) and $bin == 1) { $binary = " BINARY"; } else { $bin = $binary = ""; } // ****************** логика if (isset ($l) and $l == "or") { $logic = " OR"; } else { $logic = " AND"; } // ****************** только по разделу if (isset ($rz) and $rz == 1) { $razdel = " AND page_group = 1"; } elseif (isset ($rz) and $rz == 2) { $razdel = " AND page_group = 2"; } elseif (isset ($rz) and $rz == 3) { $razdel = " AND page_group = 3"; } elseif (isset ($rz) and $rz == 4) { $razdel = " AND page_group = 4"; } else { $razdel = ""; } // ****************** многословный запрос if (isset ($l) and $l == "all") // искать фразу { $sw_for_bold = $sw; $test = " page_content LIKE$binary '%" . $sw . "%'"; } else // искать по словам ("все слова" или "любое слово" [см. $logic]) { $sw_for_bold = str_replace (" ", "|", $sw); $sw_ar = explode (" ", $sw); $test = " page_content LIKE$binary '%" . $sw_ar [0] . "%'"; for ($w = 1; $w < count ($sw_ar); $w++) { $test .= $logic . " page_content LIKE$binary '%" . $sw_ar [$w] . "%'"; } } // ****************** результатов на странице // выводим по 10 результатов, на всякий случай задаем выборку в 10 раз больше (100) // должно быть: LIMIT $p_start, $p_end if (empty ($_GET['cp'])) { $cp = 0; $p = 1; } //print "

Результаты: " . ($p-1)*10 . "–" . ((($p-1)*10)+10); $limit = "LIMIT $cp, 100"; //print "

SELECT *, MATCH page_content AGAINST ('$sw') AS relev FROM search_content WHERE $test $razdel GROUP BY page_title ORDER BY relev DESC, page_group $limit\n\n"; //print "

$test\n\n"; // для проверки: сколько выдала база: /* $total = mysql_query ("select count(*) as digit from search_content where $test group by page_title") or die ("Query failed
" . MySQL_error ()); print "

По базе (с учетом группировки): " . mysql_num_rows ($total) . "\n"; */ // ****************** идиотская работа - вычисление РЕАЛЬНОГО количества рез-тов $total_real = mysql_query ("SELECT *, MATCH page_content AGAINST ('$sw') AS relev FROM search_content WHERE $test $razdel GROUP BY page_title") or die ("Query failed
" . MySQL_error ()); $real = 0; while ($line_real = mysql_fetch_array ($total_real, MYSQL_ASSOC)) { if (preg_match ("/$sw_for_bold/i", $line_real ['page_content'])) { $real++; } } //print "

На самом деле: $real\n"; // ИСПОЛЬЗОВАТЬ $real ДЛЯ РАЗБИВКИ НА СТРАНИЦЫ!!! $result = mysql_query ("SELECT *, MATCH page_content AGAINST ('$sw') AS relev FROM search_content WHERE $test $razdel GROUP BY page_title ORDER BY relev DESC, page_group $limit") or die ("Query failed
" . MySQL_error ()); print "

Запрос: $sw  | найдено документов: $real

\n"; $z = 0; $base = 0; while ($line = mysql_fetch_array ($result, MYSQL_ASSOC)) { $base++; if (preg_match ("/$sw_for_bold/i", $line ['page_content'])) { $z++; print "


" . (($p-1)*10+$z) . ". " . $line ['page_title'] . " \n"; //print "relev: " . $line ['relev']; } $content = $line ['page_content']; $fragment_arr = explode ($sw, $content); if (count (explode ($sw, $content)) > 1 or $l == "all") { $fragment = CreateFragment ($sw, $content); } else { for ($e = 0; $e < count ($sw_ar); $e++) { if (stristr ($content, $sw_ar [$e])) { $fragment = CreateFragment ($sw_ar [$e], $content); break; } else // ЭТО НА СЛУЧАЙ, КОГДА БАЗА НАХОДИТ ТО ЧЕГО НЕТ { $fragment = ""; } } } print "

" . preg_replace ("/$sw_for_bold/i", "\\0", $fragment) . "\n\n"; if ($z == 10) { break; } } //print "

Всего: $z / $base\n"; $p++; $log = @mysql_query ("insert into search_log (query_id, sword, found, logic, rz) values ('', '$sw', '$real', '$l', '$rz');") or die ("Query failed
" . MySQL_error ()); mysql_close($link); // ****************** страницы //print "

Всего страниц: " . $real/10; print "


Страницы: "; for ($t = 1; $t <= (($real/10)+1); $t++) { if ($t == ($p-1)) { print "$t | "; } elseif ($t == 1) { print "$t | "; } elseif ($t == $p) { print "$t | "; } else { $cpfut = ($t-1)*10; print "$t | "; } } //print "

next\n"; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } //**************************************************************************** } $ddd=microtime(); $ddd=((double)strstr($ddd, ' ')+(double)substr($ddd,0,strpos($ddd,' '))); //echo ("

Время выполнения: ".(number_format(($ddd-$ttt),3))." секунд
"); echo '

' . (number_format(($ddd-$ttt),3)); ?>