我在新闻网站上工作。像每个新闻网站一样,会有新闻,专栏,视频和照片画廊。我打算将这些不同类型的记录保存在不同的表中,但将它们与标记相关联。这是一个简单的架构:
表:新闻,视频,图库,专栏,标签,Post_to_tags
Post_to_tags:
- tagid
- postid
- posttype [新闻,视频,图库,专栏]
现在我需要做的是在单个查询中获取帖子的相关记录。很容易加入一个表并获得相关的帖子,但是当涉及到不同的表格时...有什么想法吗?
答案 0 :(得分:1)
您可能希望在两个查询中执行此操作,因为在一个查询中执行该操作会非常难看,并且在速度方面可能不会为您带来太多帮助。
因此,您可以使用标记来获取所有相关的postid,然后只需进行连接即可获得与postids相关的文章和相关记录。
select n.*, g.*, v.* FROM News n
INNER JOIN Galleries g ON(g.postid=n.postid)
INNER JOIN Videos v ON(v.postid=n.postid)
WHERE n.postid IN(
(SELECT p.postid FROM Post_to_tags p WHERE ...)
)
这应该是一个起点,但我看到你的问题,因为你有posttype。
为什么不忽略此查询的posttype并且只为故事使用相同的postid,因此他们可以轻松搜索。
答案 1 :(得分:0)
如果您的查询获得的数据类型相同,则可以使用UNION。
SELECT fielda, fieldb FROM news n
JOIN post_to_tags p ON (n.post_id=p.post_id)
where p.tag_id='x' and p.post_type='news'
UNION
SELECT fielda, fieldb FROM videos v
JOIN post_to_tags p ON (v.post_id=p.post_id)
where p.tag_id='x' and p.post_type='videos'
但如果是这种情况,您可能需要重新考虑您的架构。类似的东西:
将允许单个查询:
SELECT fielda, fieldb FROM posts p
JOIN post_to_tags pt ON (p.post_id=pt.post_id)
where pt.tag_id='x';