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