MySQL搜索匹配多个关键字

时间:2015-06-04 08:16:43

标签: mysql select

寻找与两个关键字匹配的帖子(两者都不是其中之一)。

我猜以下MySQL查询返回不匹配的原因是匹配“climate”的关键字和匹配“recycling”的关键字与t_keywords表中的行不同。你会怎么做?

pathDir

4 个答案:

答案 0 :(得分:2)

SELECT t_posts.id, t_posts.title
FROM t_posts, t_keywords, t_posts_keywords
WHERE t_posts.id = t_posts_keywords.id_post
AND t_keywords.id = t_posts_keywords.id_keyword
AND t_keywords.keyword IN ('climate', 'recycling')
GROUP BY t_posts.id HAVING count(t_keywords.id) = 2

您已经按帖子进行分组,所以您只需检查给定的帖子在原始数据中有两行,每个关键字都有一行 - 这就是HAVING的用途。如果您要匹配的关键字数量可变,那么“2”也必须是可变的,替换为应用程序的正确计数。

答案 1 :(得分:1)

回到基础:http://www.w3schools.com/sql/sql_and_or.asp

如果您的关键字是“气候” - 这意味着您对t_keywords.keyword =“气候”操作的结果为TRUE,则代码的下一部分(t_keywords.keyword =“recycling”)将始终为FALSE。
TRUE和FALSE总是意味着FALSE - 这意味着您的选择将始终为空。

您可以使用IN运算符,也可以使用()和OR,如:

WHERE t_posts.id = t_posts_keywords.id_post
AND t_keywords.id = t_posts_keywords.id_keyword
AND (t_keywords.keyword = "climate" OR t_keywords.keyword = "recycling")
GROUP BY t_posts.id

答案 2 :(得分:1)

你可以尝试这个伴侣:

SELECT
    t_posts.id, t_posts.title
FROM
    t_posts
    INNER JOIN t_posts_keywords ON t_posts_keywords.id_post = t_posts.id
    INNER JOIN t_keywords ON t_keywords.id = t_posts_keywords.id_keyword
WHERE
    t_keywords.keyword IN ('climate', 'recycling');  

E:这是根据您提供的查询来查找来自t_keywords的记录,其关键字值为'气候'或者'回收'链接到t_posts_keywords数据透视表到t_posts用于输出。

答案 3 :(得分:0)

您可以使用IN。像这样:

SELECT t_posts.id, t_posts.title
FROM t_posts, t_keywords, t_posts_keywords
WHERE t_posts.id = t_posts_keywords.id_post
AND t_keywords.id = t_posts_keywords.id_keyword
AND t_keywords.keyword IN("climate","recycling")
GROUP BY t_posts.id

您也可以在之间使用OR。像这样:

SELECT t_posts.id, t_posts.title
FROM t_posts, t_keywords, t_posts_keywords
WHERE t_posts.id = t_posts_keywords.id_post
AND t_keywords.id = t_posts_keywords.id_keyword
AND 
(
   t_keywords.keyword ="climate" OR
   t_keywords.keyword ="recycling"
)
GROUP BY t_posts.id