2012-07-18 52 views
1

在我的新聞網頁,我想用在主新聞報「關鍵詞」和IM使用此查詢到有一個相關的新聞:結果與「象」在查詢中使用學說2

public function RelatedNews($limit,$offset=0,$keywords) 

    {  
    $q = $this->_em->createQueryBuilder(); 
     $q->select('n.title,n.shortContent,n.longContent,n.keywords') 
      ->from('MyAppMyBundle:News', 'n') 
      ->where($q->expr()->like('n.keywords', $q->expr()->literal('%' . $keywords . '%'))) 
       ->setFirstResult($offset) 
       ->setMaxResults($limit); 

    return $q->getQuery()->getResult(); 

    } 

的查詢正確的,但只是當它找到一個關鍵詞,我有一個錯誤的結果,當我把話

名單在我的表「消息」我有一排「關鍵字」,我儲存像我的關鍵字:

word 1 , word 2 , word 3 ... 

所以我希望結果,當查詢查找單詞列表中的單詞...

+0

提供更多的細節,我真的不明白你在這裏問題 – AdrienBrault 2012-07-18 11:13:18

+0

@AdrienBrault好的,我找到一個解決方案,在答案的紅鳥,TNT ... – Nll 2012-07-18 16:06:10

回答

1

LIKE%value%將匹配包含子字符串'值'的任何字符串。

因此,如果輸入的關鍵字字符串恰好是其中一個新聞關鍵字的子字符串,問題中的查詢只會導致多個關鍵字匹配。例如,如果您有關鍵字=「cycling,france,wiggins」的新聞項目,那麼如果您輸入「騎車,法國」或「法國wiggins」而不是「騎車,wiggins」甚至「騎自行車,法國」或「騎自行車的法國」。

如果您更改傳入的$關鍵字字符串的值以將關鍵字與%通配符字符分隔開,那麼您應該獲得要查找的匹配項。

例如,如果您將「騎車,wiggins」轉換爲「%cycling%wiggins%」,那麼它將匹配「騎車,法國,wiggins」。

但是,請注意,使用這種LIKE方法查詢「fran,gin」也會匹配「cycling,wrance,wiggins」。要匹配整個關鍵字,更好的方法是將關鍵字分別存儲在單獨的表上並使用其他類型的查詢。

+0

好吧,我找到我可以做你的解決方案是偉大的,tnks – Nll 2012-07-18 16:07:40