Лістинг 6. 29. Сценарій search.php - пошук статей за ключовими словами
<?php
include "include_fns.php";
include "header.php";
$conn = db_connect();
if ($keyword) {
$до = split(" ", $keyword); $num_keywords = count($k);
for ($i=0; $i<$num_keywords; $i++) {
if ($i) $k_string .= "or до.keyword = '".$k[$i]."' ";
else $k_string .= "до.keyword = '".$k[$i]."' "; }
$and .= "and ($k_string) ";
}
$sql = "select s.id, s.headline, 10*sum(до.weight) /$num_keywords
as score from stories s, keywords до where s.id = до.story $and
group by s.id, s.headline order by score desc, s.id desc";
$result = mysql_query($sql, $conn);
print "<H2>Search results</H2>";
if (mysql_num_rows($result)) {
print "<TABLE>";
while ($qry = mysql_fetch_array($result)) {
print "<TR><TD>";
print $qry[headline];
print "</TD><TD>";
print floor($qry[score])."%";
print "</TD></TR>";
}
print "</TABLE>";
}
else { print "No matching stories found"; }
include "footer.php";
?>
Спочатку рядок ключового слова, передаваний в сценарій, розбивається на окремі слова для пошуку. В даному прикладі не використовуються які-небудь розширені методи пошуку, такі як можливість вживання операторів AND і OR, або об'єднання слів у фразу.
if ($keyword) {
$до = split(" ", $keyword); $num_keywords = count($k);
for ($i=0; $i<$num_keywords; $i++)
{ if ($i)
$k_string .= "or до.keyword = '".$k[$i]."' ";
else $k_string .= "до.keyword = '".$k[$i]."'";
}
$and .= "and ($k_string)";
}
У цьому коді використовується РНР-функция split() для створення масиву, що містить кожне слово рядка $keyword, розділене пропусками. Якщо вказано лише одне слово, повертається масив з єдиним елементом, і подальший цикл виконується один раз. В результаті умова, що зберігається в змінній Sand, матиме наступний вигляд:
and (до.keyword = 'keyword1' or до.keyword = 'keyword2' or
до.keyword = ' keyword3')
Нижче наводиться запит пошуку, заснований на розглянутому раніше коді:
select s.id, s.headline, 10 * sum(до.weight) /$num_keywords as score
from stories s, keywords до
where s.id = до.story and (до.keyword = 'keyword1'
or до.keyword = ' keyword2' or до.keyword = 'keyword3' )
group by s.id, s.headline order by score desc, s.id desc
Загальний показник значущості визначається як сума вагових значень всіх соответствующих ключових слів, ділена на кількість шуканих ключових слів і умноженная на десять. Ця формула придатна для пошуків, коли всі введені ключові слова відповідають ключовим словам бази даних.
Оскільки показники ваговитості знаходяться в діапазоні від 1 до 10, максимальне значення загального показника значущості складає 100. Ця величина для пошуку за трьома ключовими словами досягається, коли всі три слова знайдено і кожне з них має вагове значення 10.
Вікно редактора.Залишилася нерозглянутою одна складова проекту, що відповідає за публікацію статті після її написання. Це здійснює сценарій publish.php, показаний в лістингу 6. 20.
Дата добавления: 2016-04-02; просмотров: 663;