您好我有一个应用程序,其中包含帖子,标签和tag_ref链接表。我想查询具有特定标记关联的帖子。
数据库结构如下:
帖子
ID
tags_ref
ROW_ID
表
TAG_ID
代码
ID
safe_tag
标签
我的查询基本上是在$ safe_tag不为null的情况下然后在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'
我得到的奇怪结果根本没有关联的标签。
由于
答案 0 :(得分:1)
这将仅返回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'
我还添加了表别名并删除了引号。
如果您没有收到任何结果,那就会告诉我没有food
的帖子。