2017-08-22 68 views
3

作爲標題說我想實施一個標籤搜索需要或拒絕。Tagsearch按條款包括和排除

簡而言之:

您可以通過像 「足球」 的一個術語搜索

查詢去

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部分,因爲我總是得到相同的結果集。

我用括號打了一個圓形,並試着首先聚集標籤。

回答

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 

由於這一基本規定要與搜索詞什麼的,除了pt.tag_id不等於4(你可能需要做的「4」,如果它是一個字符串)。

+0

我會嘗試,但4也可以是多個參數像4,5,6,7,x我想它打破了那裏 – Soundz