0
我已經整理了一個迷你搜索算法,根據搜索結果的類型以及測試正文中的鏈接數,垃圾郵件詞等因素爲搜索結果賦予分數。訂購帶有生成號碼的PHP結果
不幸的是,我不知道如何訂購結果取決於這個數字是如何生成的。在分配給它的「分數」上訂購PHP結果的任何想法?我應該補充說,這個分數不是在數據庫中保存的,而是根據用戶搜索的內容每次生成的。
OK,所以這個列表,從而所有的結果取決於使用什麼搜索詞,我需要它的「TotalScore」進行排序,但我不能工作了怎麼辦呢?
下面是代碼:
$refType = $_GET["ref"];
$setLimit = $_GET["list"];
//CATCH & SECURE THE QUERY
$q = mysql_real_escape_string($_GET["q"]);
//SET LISTING VALUE IF CHOSEN, DEFAULT 10
if(!$setLimit || $setLimit == "0"){
$setLimit = "10";
} else {
$setLimit = $_GET["list"];
}
//GET NUMBER OF WORDS IN QUERY & RETURN ERROR IF MORE THAN 12
$searchTermCount = str_word_count($q);
if($searchTermCount > 12){
$searchLine = "";
$searchList = "Your search contained too many words! Please go back and try again, use less than 12 words to find what you are looking for.";
} else if($q == "" || !$q || $q == " "){
$searchLine = "";
$searchList = "You did not submit a search term! Please go back and enter your city into the search bar!";
} else {
$searchLine = "Your search for " . $q . " found the following results";
//PUT NEW ALGORITHM HERE
$findDetails = mysql_query("SELECT * FROM [TABLENAME] WHERE upper(city) like '%$q%' AND verified='1' OR upper(county) like '%$q' AND verified='1' OR upper(title) like '%$q%' AND verified='1' OR upper(intro) like '%$q%' AND verified='1' OR upper(content) like '%$q%' AND verified='1' ORDER BY datePosted DESC LIMIT $setLimit");
while($row = mysql_fetch_array($findDetails)){
$adId = $row["id"];
$adTitle = $row["title"];
$adIntro = $row["intro"];
$adCity = $row["city"];
$adCounty = $row["county"];
$adVerified = $row["verified"];
$cutIntro = substr($adIntro, 0, 140);
$numberOfResults = mysql_num_rows($findDetails);
$findReviews = mysql_query("SELECT * FROM [TABLENAME2] WHERE adventureID='$adId'");
$findReviews = mysql_num_rows($findReviews);
$titleScore = "";
$introScore = "";
$contentScore = "";
//CUT SEARCH TERM
$qBreak = explode(" ", $q);
foreach($qBreak as $qWord){
$titleScore = $titleScore+substr_count($adTitle, $qWord);
$introScore = $introScore+substr_count($adIntro, $qWord);
$contentScore = $contentScore+substr_count($adContent, $qWord);
}
$totalScore = $titleScore+$introScore+$contentScore;
$searchList .='
<div style="width: 100%;" class="result' . $totalScore . '">
' . $adTitle . '<br />' . $adIntro . '<br /><br />' . $adContent . '
<br /><br /><br />
Total Score: ' . $totalScore . '<br />
Title Score: ' . $titleScore . '<br />
Intro Score: ' . $introScore . '<br />
Content Score: ' . $contentScore . '<br /><br />
</div>
';
}
}
剛剛添加了澄清的代碼。乾杯! – JackWillDavis
將所有內容($ titleScore,$ introScore,...)放在一起放入一個數組中。將此數組添加到另一個數組並使用usort進行排序。 –
嗯,它不起作用。我認爲這是因爲這段代碼被包含在另一個「while」循環中,該循環從MySQL數據庫中獲取所有結果。我會提出所有的代碼,看看它是否有意義 – JackWillDavis