寻找与两个关键字匹配的帖子(两者都不是其中之一)。
我猜以下MySQL查询返回不匹配的原因是匹配“climate”的关键字和匹配“recycling”的关键字与t_keywords表中的行不同。你会怎么做?
pathDir
答案 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