您好,我有一个包含帖子、标签和 tag_ref 链接表的应用程序。我想查询具有特定标签关联的帖子。
数据库结构如下:
帖子
ID
tags_ref
行号
表格
标签ID
标签
ID
安全标签
标签
我的查询基本上是如果 $safe_tag 不为空,则在 post.id =tags_ref.row_id 上加入tags_ref,在tags_ref.tag_id =tags.id 上加入标签,其中tags_ref.table = 'posts' 和tags.safe_tag = ' food' 和 post.city_id = 2
这个查询正确吗?我使用的连接类型是否正确?
SELECT *
FROM (`posts`)
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id`
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id`
WHERE `tags_ref`.`table` = 'posts'
AND `tags`.`safe_tag` = 'food'
AND `posts`.`city_id` = '2'
我得到了奇怪的结果,根本没有关联的标签。
谢谢
最佳答案
这只会返回 posts
表中的结果,而不是连接表中的所有 列。我已删除您在问题文本中未指定的 city_id
约束(并且在您的查询中曾):
SELECT P.*
FROM posts AS P
INNER JOIN tags_ref AS TR ON P.id = TR.row_id
INNER JOIN tags AS T ON TR.tag_id = T.id
WHERE TR.table = 'posts'
AND T.safe_tag = 'food'
我还添加了表别名并删除了引用。
如果您没有得到任何结果,这表明我没有关于食物
的帖子。
关于SQL:有关 sql 连接的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706075/