2017-01-16 41 views
1

我想選擇那些有相似標題的電影。 我發現了這個,但是這種方式沒有用,它什麼也不給。我想給玩具總動員2,玩具總動員3和其他具有類似標題像玩具soldielrs等如何編寫查詢來選擇相似的標題?

$title = "Toy Story"; 
$query = mysql_query("SELECT title, year, poster, LEVENSHTEIN_RATIO(".$title.", title) as textDiff FROM movies HAVING textDiff > 60"); 

我可以在PHP中使用該功能比較字符串:

static public function string_compare($str_a, $str_b) 
{ 
    $length = strlen($str_a); 
    $length_b = strlen($str_b); 

    $i = 0; 
    $segmentcount = 0; 
    $segmentsinfo = array(); 
    $segment = ''; 
    while ($i < $length) 
    { 
     $char = substr($str_a, $i, 1); 
     if (strpos($str_b, $char) !== FALSE) 
     {    
      $segment = $segment.$char; 
      if (strpos($str_b, $segment) !== FALSE) 
      { 
       $segmentpos_a = $i - strlen($segment) + 1; 
       $segmentpos_b = strpos($str_b, $segment); 
       $positiondiff = abs($segmentpos_a - $segmentpos_b); 
       $posfactor = ($length - $positiondiff)/$length_b; 
       $lengthfactor = strlen($segment)/$length; 
       $segmentsinfo[$segmentcount] = array('segment' => $segment, 'score' => ($posfactor * $lengthfactor)); 
      } 
      else 
      { 
       $segment = ''; 
       $i--; 
       $segmentcount++; 
      } 
     } 
     else 
     { 
      $segment = ''; 
      $segmentcount++; 
     } 
     $i++; 
    } 

    // PHP 5.3 lambda in array_map  
    $totalscore = array_sum(array_map(function($v) { return $v['score']; }, $segmentsinfo)); 
    return $totalscore;  
} 

卻怎麼也我在SELECT查詢或其他方式進行比較?

+0

「LEVENSHTEIN_RATIO」不是MySQL函數 - 您應該自己添加DB。 –

+0

但您可以使用「LIKE」進行查詢,例如:'SELECT title,year,poster FROM movies where title LIKE'%「。$ title。」%'「' –

+1

在mysql中有* SOUNDEX()* http ://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex – donald123

回答

0

您可以使用諸如查詢爲: 以下示例爲哪些客戶名稱與KH

select * from customer where name like '%kh' 

下面的例子將返回從表客戶的所有記錄結束將返回從表客戶的所有記錄其客戶名字開始與KH

select * from customer where name like 'kh%' 

下面的例子從表客戶返回所有記錄其客戶名稱的中間世界KH

select * from customer where name like 'kh%' 

,如果你想更具體的記錄,然後添加一些和/或條件查詢

我建議你閱讀本 http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like

+0

謝謝,但如果我搜索,例如玩具總動員,它只給出那些同時包含玩具和故事單詞的東西。沒有給出例如玩具士兵。 – user7425848

0

我想你可能需要定義事物的相似需要被認爲是一場比賽。 但如果包含的話只想搜索,你可以通過空格分割你的搜索字符串,並在查詢中使用它在REGEXP

$search_array = explode(" ", "Toy story"); 

$query = "SELECT title, year, poster FROM movies WHERE title REGEXP '".implode("|", $search_array)."'"; 

這可能會匹配了很多行,但你可以做一個更嚴格正則表達式。

+0

我試過這個,但通常會給出隨機結果。如果我試圖扯掉「Vigyázz ,kész,szörf! 2.「它給了我」Azéhezőkviadala - futótűz「,」極品飛車「,」300 - 一個birodalom hajnala「等,對不起匈牙利的例子。 – user7425848