我需要MySQL查询的帮助。这个例子比我实际需要的那个简单得多,但它很相似。这是我的示例表,我试图让它易于阅读。
posts
---------------
id date
1 2010
2 2010
posts_tags
---------------
post_id tag_id
1 1
1 2
1 3
tags
--------------
id tagname
1 foo
2 bar
3 hello
tags_active
--------------
tag_id active
1 yes
2 no
3 no
基本上我需要做的是返回属于帖子ID 1的有效标签。在这种情况下,它应该返回 foo
以下是我对此类查询的尝试:
SELECT tags.tagname
FROM posts
JOIN posts_tags ON posts.id = posts_tags.post_id
JOIN tags ON posts_tags.tag_id = tags.id
JOIN tags_active ON tags.id = tags_active.id
WHERE tags_active.active = 'yes'
不幸的是,似乎没有用。请指教,谢谢你的时间。
答案 0 :(得分:2)
您的上次加入时间是tags.id = tags_active.id
。
应为tags.id = tags_active.tag_id
:
SELECT tags.tagname
FROM posts
JOIN posts_tags ON posts.id = posts_tags.post_id
JOIN tags ON posts_tags.tag_id = tags.id
JOIN tags_active ON tags.id = tags_active.tag_id
WHERE tags_active.active = 'yes'
答案 1 :(得分:2)
您上一次加入时出现轻微错误 - 在这种情况下,明确的INNER加入可能是值得的。
SELECT
tags.tagname
FROM
posts
INNER JOIN
posts_tags ON posts.id = posts_tags.post_id
INNER JOIN
tags ON posts_tags.tag_id = tags.id
INNER JOIN
tags_active ON tags.id = tags_active.tag_id
WHERE
tags_active.active = 'yes'