相关文章:通过不同表格中的标签获取记录

时间:2009-10-21 14:47:59

标签: php mysql schema

我在新闻网站上工作。像每个新闻网站一样,会有新闻,专栏,视频和照片画廊。我打算将这些不同类型的记录保存在不同的表中,但将它们与标记相关联。这是一个简单的架构:

表:新闻,视频,图库,专栏,标签,Post_to_tags

Post_to_tags:
- tagid
- postid
- posttype [新闻,视频,图库,专栏]

现在我需要做的是在单个查询中获取帖子的相关记录。很容易加入一个表并获得相关的帖子,但是当涉及到不同的表格时...有什么想法吗?

2 个答案:

答案 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'

但如果是这种情况,您可能需要重新考虑您的架构。类似的东西:

  • 发布包含所有通用字段的表格 帖子类型和帖子的标志字段 输入
  • Details_X表格,具有特定字段 输入X帖子

将允许单个查询:

SELECT fielda, fieldb FROM posts p 
  JOIN post_to_tags pt ON (p.post_id=pt.post_id) 
  where pt.tag_id='x';