2012-05-29 70 views
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> 
    '; 

} 

} 
+0

剛剛添加了澄清的代碼。乾杯! – JackWillDavis

+0

將所有內容($ titleScore,$ introScore,...)放在一起放入一個數組中。將此數組添加到另一個數組並使用usort進行排序。 –

+0

嗯,它不起作用。我認爲這是因爲這段代碼被包含在另一個「while」循環中,該循環從MySQL數據庫中獲取所有結果。我會提出所有的代碼,看看它是否有意義 – JackWillDavis

回答

3

退房的usort功能。你提供一個比較你自己的比較函數,比較數組中的兩個元素。應該很容易編寫一個回調函數,比較數組中兩個元素的分數。