Създаване на търсачката
Първо си създаваме един нов файл на име
form.html и създаваме в него формата за търсене. За тази цел си създаваме едно текстово поле и един бутон за търсене.
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <html>
<head>
<title>Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<table border="0" cellspacing="2" cellpadding="0">
<tr>
<form action="search.php" method="GET">
<td colspan="2" align="center">
<input name="search_query" type="text">
<input name="search_button" type="submit" value="Search">
</td>
</form>
</tr>
</table>
</body>
</html> |
Следва PHP кода, който ще въведем в нашия документ на име search.php.
Запитването към MySQL
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| <?
mysql_pconnect("xxx","xxx","xxx")
or die ( 'Unable to connect to server.' );
mysql_select_db("test")
or die ( 'Unable to select database.' );
$RESULTS_LIMIT=10;
if(isset($search_query))
{
if(!isset($first_pos))
{
$first_pos = "0";
}
$start_search = getmicrotime();
$sql_query = mysql_query("SELECT * FROM news WHERE MATCH(title,article) AGAINST('$search_query')");
if($results = mysql_num_rows($sql_query) != 0)
{
$sql_result_query = mysql_query("SELECT * FROM news WHERE MATCH(title,article) AGAINST('$search_query') LIMIT $first_pos, $RESULTS_LIMIT");
}
else
{
$sql_query = mysql_query("SELECT * FROM news WHERE (title LIKE '%".$search_query."%' OR article LIKE '%".$search_query."%') ");
$results = mysql_num_rows($sql_query);
$sql_result_query = mysql_query("SELECT * FROM news WHERE (title LIKE '%".$search_query."%' OR article LIKE '%".$search_query."%') LIMIT $first_pos, $RESULTS_LIMIT ");
}
$stop_search = getmicrotime();
$time_search = ($stop_search - $start_search);
}
?> |
За да можем да продължим нататък трябва да разберем какво точно направихме по-горе. Първо гледаме дъли изобщо е зададена някаква фраза за търсене. Ако това е факт, то променливата
$query_string ще съществува. След като вече е зададена фразата проверяваме дъли съществува маркера за нашето прилистване на резултатите. Т.е ако променливата
$first_pos не съществува, то ние задаваме, че показването на резултатите ще започва от първа страница, като инициализираме променливата със стойност нула.
Първата заявка претърсва полетата
title, article за фразата
$search_query. Един от недостатъците при това запитване, е че MySQL не извежда резултати за фрази, който се срещат прекалено често в текстовете. Поради тази причина проверяваме броя на намерените резултати и ако той е нула, то тогава преминаваме към стандартно претърсване на полетата от таблицата с LIKE %...%, което в общи линии е малък недостатък, тъй като чрез този вид запитване нямаме възможност да използваме INDEX.
Специално за изчисляването на времето на заявката написваме една функция, която да връща времето в секунди.
CODE1
2
3
4
5
| function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
} |
За изчисляване на времето на търсенето, извикахме два пъти функцията преди и след запитването:
CODE1
2
3
| $start_search = getmicrotime();
$stop_search = getmicrotime();
$time_search = ($stop_search - $start_search); |
Променливата $time_search съдържа времето на запитването към базата за данни.