Лістинг 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; просмотров: 613;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.