2015-10-09 64 views
0

我在回答問題的應用程序,作爲其中的一部分,它需要查看以前存儲在SQL數據庫中的問題,並查找以前的問題匹配單詞,然後它將從數據庫獲取該行的屬性。php在sql數據庫中找到最匹配的句子

我已經能夠讓它爲數據庫中的每一行生成一個匹配字的數組。但是我需要一種組織這些數組來選擇最匹配的數組的方法。這裏是我曾經使用過的SQL和PHP。

$questions1 = $_GET['question']; 

$questionsarray = explode(" ",$questions1); 

新的問題被變成一個數組,它下面會相比對其他問題進行比賽的

$sql = "SELECT * FROM records WHERE userid= '24.9.71.79'"; 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 

while($row = $result->fetch_assoc()) { 

$questionsasked = $row['old_questions']; 

// turns old question into an array 
$last_q_array = explode(" ",$questionsasked); 

//finds matches between the old and new question  
$intersectarray = array_intersect($last_q_array,$questionsarray); 

然後,它使用和array_diff()清理掉常用詞,以幫助它專注於找到真正的話題

$cleanedarray = array_diff($intersectarray ,$commonwords); 

//prints the array if it find matches and sets the var 
if(count($cleanedarray)>0) { 

    print_r($cleanedarray); 

    $desiredattri = $row[last_answer_type]; 

    echo "<br />----------------<br />"; 
} 

} 
} 

我使用print_r只是爲了測試。所以它在製作少量顯示匹配單詞的數組方面做得非常出色。這看起來是這樣的

Array ([3] => card) 
---------------- 
Array ([3] => card [7] => work? ) 
---------------- 
Array ([0] => find [2] => card [7] => work?) 

所以現在我需要找到一種方法來分析這些陣列,並找出最匹配的人。我可以使用count()來計算每個數組中的匹配,但仍然需要將該數字與剩餘的數組進行比較,然後使用大多數匹配數組的屬性。

+0

請正確標記您的問題。你在使用SQL Server還是MySQL? –

+0

@GordonLinoff對不起,我沒有在SQL方面的專業知識,但我很確定它是mySQL –

+0

這看起來很可疑,就像作業... –

回答

0

你可以嘗試這樣的事情。它將使用單詞本身作爲數組鍵,數組值是計數。

$result = array(); 
foreach ($cleanedarray as $word) { 
    if (!array_key_exists($word, $result)) { 
     $result[$word] = 0; 
    } 

    $result[$word]++; // keep count using the word as key 
} 

我敢肯定,有可能是其他內建P​​HP函數可能爲你做這個,但是這是來找我副手的快速正骯髒的方式。

+1

感謝你這是非常接近我所需要的,我想我需要使用它作爲一個起點,因爲我仍然需要從它找到最匹配的sql行中提取值。但我認爲你至少讓我走上正軌。 –

相關問題