2015-05-01 46 views
1

訂購我有兩個表:MySQL的全文搜索,加入和通過兩者相關性和一個整數,使用PHP和PDO

  • Meta大約有一個ID的所有信息。
  • Posters具有由movie_id一個多到一個關係到元(許多海報一部電影,有時)

現在我想創建一個全文檢索使用PHP和PDO準備語句,並返回結果首先是相關性,然後是年份。

所以,如果「測試」進行搜索,反對票

test, 2 
test, 1 
testy test, 1 
test me, 1 
lets test, 1 

我想「測試,2」以示先其次是第二次測試,那麼最相關的搜索上任何全文認爲是相關的基礎?上面的順序是一個好的開始。

這是我到目前爲止創建

$query = "SELECT Meta.id, Meta.year, Posters.filename, Meta.title, 
       FROM Meta INNER JOIN Posters ON Meta.id = Posters.movie_id 
       WHERE MATCH(Meta.title) 
       AGAINST(:term IN BOOLEAN MODE) 
       ORDER BY Meta.year DESC 
       LIMIT 50"; 
    $statement = $this->db->prepare($query); 
    $statement->bindValue(':term', $term); 
    $statement->execute(); 
    return $statement->fetchAll(PDO::FETCH_ASSOC); 

這只是今年返回它們 - 所有文本相關性是失去了什麼?

我見過其他非常複雜的例子,我很難遵循 - 他們沒有包括任何JOIN,這使得它更加困難。

理想情況下,我想單個查詢。

編輯:澄清,我正在尋找

the girl with the dragon tattoo 

結果

nowhere girl 
how to train your dragon 2 
how to train your dragon 
gone girl 
(several movies with 'girl' keyword in them) 
The girl with the dragon tattoo 

通知我其實搜索的電影是怎麼過去的,而「無處女孩」是第一個,因爲它是最近的。

+2

您能否更清楚地知道什麼是返回與您想要返回的內容? –

+0

肯定會把它添加到主要問題 – Dan

回答

2

你好像在這裏有兩個問題。首先,如果您匹配IN BOOLEAN MODE,您將始終獲得1.0的相關性。

接下來,您沒有任何相關性,因爲您沒有使用它。您需要使用類似的方式將其添加到您的查詢中:

​​