2017-08-22 5 views
3

タイトルとして、必要なタグまたは拒否されたタグによる検索を実装したいとしています。要するにTagsearch by Term

あなたが "サッカー" のような用語で検索

クエリが

SELECT 
    p.* 
    FROM 
    posts p 
    WHERE 
    p.title LIKE '%football%' 

十分なフェアを行きます。

は今、あなたはタグ「勝利」を持つすべての投稿をしたい、tag_idは、検索フォームで提供される「新」と「ローカル」

SELECT DISTINCT 
    p.* 
    FROM 
    posts p 
    INNER JOIN posts_tags pt 
    ON pt.post_id = p.id 
    WHERE 
    (
    pt.tag_id IN (1,2,3) 
) 
    AND p.title LIKE "%SearchTerm%" 

それとも、「テニスに関連する何かを見つけるためにしたくありません「

SELECT DISTINCT 
    p.* 
    FROM 
    posts p 
    INNER JOIN posts_tags pt 
    ON pt.post_id = p.id 
    WHERE 
    (
    pt.tag_id IN (pt.tag_id) <- Workarround for "in everything" 
    AND pt.tag_id NOT IN (4) 
) 
    AND p.title LIKE '%SearchTerm%' 

各クエリはIN/NOT IN部分を無視しているようだと、私はいつも同じ結果セットを得るため、単にtitle LIKE部品のために行きます。

私は括弧でarroundを演奏し、まずタグを集約しようとしました。

答えて

1

私はこれが働くだろうと想像します:

SELECT DISTINCT 
    p.* 
    FROM 
    posts p 
    INNER JOIN posts_tags pt 
    ON pt.post_id = p.id 
    WHERE p.title LIKE '%SearchTerm%' 
    AND pt.tag_id <> 4 

これは基本的に4等しくないpt.tag_idを除き、あなたは検索用語を使って何をしたい状態として(あなたがする必要があるかもしれない「4」、それはだ場合文字列)。

+0

私は試みますが、4はまた、4,5,6,7、xのような複数の引数になる可能性があります。 – Soundz