1

私のニュースウェブページでは、主要なニュースで引用されている「キーワード」を使用した関連ニュースと、このクエリを使用したimを使用したいと思います。

   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();

  }

クエリは正しいですが、1つのキーワードが見つかったときに、単語のリストを入力すると間違った結果になります

私のテーブル「ニュース」には「キーワード」の行があり、次のようにキーワードを保存しています。

word 1 , word 2 , word 3 ...

だから私はクエリが単語のリストから単語を見つけたときに結果が出るといいのですが...

4

1 に答える 1

1

LIKE%value%は、サブ文字列'value'を含むすべての文字列と一致します。

したがって、質問のクエリは、入力されたキーワードの文字列がニュース項目の1つにあるキーワードのサブ文字列である場合にのみ、複数のキーワードに一致します。

たとえば、キーワードが「cycling、france、wiggins」のニュースアイテムがある場合、「cycling、france」または「france、wiggins」を入力すると一致しますが、「cycling、wiggins」または「cycling」は入力しません。 、フランス」または「サイクリングフランス」。

渡された$keywords文字列の値を変更して、キーワードを%ワイルドカード文字で区切ると、探している一致が得られるはずです。

たとえば、「cycling、wiggins」を「%cycling%wiggins%」に変換すると、「cycling、france、wiggins」と一致します。

ただし、このLIKEアプローチを使用すると、「fran、gin」のクエリも「cycling、france、wiggins」と一致することに注意してください。キーワード全体を一致させるには、キーワードを個別に別のテーブルに保存し、別の種類のクエリを使用することをお勧めします。

于 2012-07-18T15:02:12.093 に答える