Php 相关帖子:通过标签从不同的表中获取记录

Php 相关帖子:通过标签从不同的表中获取记录,php,mysql,schema,Php,Mysql,Schema,我在一家新闻网站工作。像每一个新闻网站一样,将会有新闻、专栏、视频和图片库。我计划将这些不同类型的记录保存在不同的表中,但将它们与标记关联起来。下面是一个简单的模式: 表格:新闻、视频、图库、专栏、标签、Post_to_标签 张贴到标签: -tagid -posted -posttype[新闻、视频、画廊、专栏] 现在我需要做的是在一个查询中获取帖子的相关记录。加入一个表并获得相关帖子很容易,但当涉及到不同的表时。。。有什么想法吗?您可能希望在两个查询中执行此操作,因为在一个查询中执行此操作将非

我在一家新闻网站工作。像每一个新闻网站一样,将会有新闻、专栏、视频和图片库。我计划将这些不同类型的记录保存在不同的表中,但将它们与标记关联起来。下面是一个简单的模式:

表格:新闻、视频、图库、专栏、标签、Post_to_标签

张贴到标签:
-tagid
-posted
-posttype[新闻、视频、画廊、专栏]


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

您可能希望在两个查询中执行此操作,因为在一个查询中执行此操作将非常难看,并且可能无法在速度方面为您带来太多好处

因此,您可以使用标签获取所有相关的帖子,然后只需进行连接即可获取与帖子相关的文章和相关记录

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,这样它们就可以轻松地进行搜索。

如果您的查询得到相同数据类型的相同数量的字段,您可以使用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'
但如果是这种情况,您可能需要重新考虑您的模式。比如:

  • 具有所有公用字段的Post表 post类型,以及post的标志字段 类型
  • 详细信息\u 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';

你能提供更多的细节吗?不清楚你想要什么。你能解释一下你想要选择什么吗?我需要从不同的表中获取每个相关的记录。正如我所说,连接一个表很容易,但我必须根据posttype连接不同的表。感谢您对表模式的建议。我也这么想。我还考虑将post_链接和post_标题存储在post_to_标签表中。所以我不需要使用join。但每种方式都有自己的问题。表现将非常重要。所以我在寻找“最便宜”的解决方案。