我有一个帖子数据库,每个帖子都有标签。这些表分别命名为Posts
和Tags
。我还有一个名为Posts_Tags
的第三个表,它在这两个表之间保持多对多的关系。
为了做到这一点,我的帖子和我的代码表都有一个id
列。因此,我的Posts_Tags
表格同时包含postid
和tagid
列,用于存储映射。
我正在查询,例如,标题中带有“class”一词的所有帖子。我可以使用此查询轻松完成此操作:
SELECT * FROM Posts WHERE title LIKE '%{class}%'
但是,现在我想查询所有帖子,这些帖子不仅标题中有“class”,而且还标有“Java”标签。我可以在两个单独的查询中执行此操作,其中我首先获取Java标记的id:
SELECT id FROM Tags WHERE name='Java'
然后我可以将其插入到我的第一个查询中,如下所示:
SELECT Posts.*
FROM Posts
INNER JOIN Posts_Tags
ON Posts.id=Posts_Tags.postid
WHERE Posts_Tags.tagid='$java_tag_id'
AND title LIKE '%{class}%'
但是,我知道我可以在一个查询中执行此操作,我只是不知道如何。在做一个连接时我仍然需要考虑很多关于连接的事情,并且在同一个查询中进行多个连接会让我头晕目眩。我应该如何构造我的查询来执行此操作?
答案 0 :(得分:2)
SELECT p.*
FROM Posts p
JOIN Posts_Tags pt
ON pt.postid = p.id
JOIN tags t
ON t.id = pt.tagid
WHERE t.tag='java'
AND p.title LIKE '%{class}%';
答案 1 :(得分:0)
SELECT
p.*
FROM posts as p
INNER JOIN Posts_Tags pt ON pt.post_id = p.id
INNER JOIN Tags as t ON pt.tags_id = t.id
WHERE t.tag='java'
AND p.title LIKE '%keyword%';