Php 如何用一个查询连接帖子?

Php 如何用一个查询连接帖子?,php,mysql,sql,join,Php,Mysql,Sql,Join,我尝试用terms表连接我的post表行,我的数据库post和数据库结构与wordpress相同,我不知道如何用多行连接一行 明确的例子: 邮政表格: post_id post_title post_content post_dateline post_owner 术语表: term_id term_name term_title term_type 术语表: post_id term_id 现在我有: id值为3的帖子; 具有id值的三项(4,6,7) 术语与行之间的关系,如: po

我尝试用terms表连接我的post表行,我的数据库post和数据库结构与wordpress相同,我不知道如何用多行连接一行

明确的例子:

邮政表格:

post_id
post_title
post_content
post_dateline
post_owner
术语表:

term_id
term_name
term_title
term_type
术语表:

post_id
term_id
现在我有: id值为3的帖子; 具有id值的三项(4,6,7)

术语与行之间的关系,如:

  post_id      term_id
     3            4
     3            6
     3            7

是否可以通过一次查询获得所有这些信息,或者我应该先查询帖子,然后尝试获取术语信息?

您要查找的联接类型是左联接。大概是这样的:

Select * from post p
left join term_relationships r on r.post_id = p.id
left join terms t on t.term_id = r.term_id

您要查找的联接类型为左联接。大概是这样的:

Select * from post p
left join term_relationships r on r.post_id = p.id
left join terms t on t.term_id = r.term_id

如果我正确理解您的要求,请尝试:

select * from post_table p
left join terms_table t on p.post_id = t.term_id
或者,另一种选择可能是:

select *, (select term_id from term_table where term_id=p.post_id) from post_table p

如果我正确理解您的要求,请尝试:

select * from post_table p
left join terms_table t on p.post_id = t.term_id
或者,另一种选择可能是:

select *, (select term_id from term_table where term_id=p.post_id) from post_table p

使用映射表启动联接,并在两个表上使用左联接添加数据

SELECT * FROM  term_relationships 
 LEFT OUTER JOIN terms ON term_relationships.term_id = terms.term_id 
 LEFT OUTER JOIN posts ON term_relationships.post_id = posts.post_id

使用映射表启动联接,并在两个表上使用左联接添加数据

SELECT * FROM  term_relationships 
 LEFT OUTER JOIN terms ON term_relationships.term_id = terms.term_id 
 LEFT OUTER JOIN posts ON term_relationships.post_id = posts.post_id

你需要它做什么?我认为使用一个查询就可以得到它,这会产生反效果

为什么不使用两个查询

SELECT * FROM posts;
SELECT * FROM terms WHERE term_id IN (SELECT term_id FROM term_relationships WHERE post_id = $post_id);
对不起,我的英语不好


你需要它做什么?我认为使用一个查询就可以得到它,这会产生反效果

为什么不使用两个查询

SELECT * FROM posts;
SELECT * FROM terms WHERE term_id IN (SELECT term_id FROM term_relationships WHERE post_id = $post_id);
对不起,我的英语不好


使用mysql的GROUP_CONCAT函数,它会将多行连接到一行,但会将结果作为逗号分隔的字段提供给您。

使用mysql的GROUP_CONCAT函数,它会将多行连接到一行,但会将结果作为逗号分隔的字段提供给您。

如果需要返回一行,可以使用mysql GROUP_CONCAT()函数,但您最好使用单独的查询来获取post/terms关系。为什么不在terms表中设置post\u id列?我使用的term\u关系与wordpress类似,因为一篇文章有多个术语。最好的结果可能是将其拆分为两个单独的查询。您不必使用包含关系数据的表。只需将“post_id”列添加到terms表中。并且将有多行具有相同的“post_id”值。然后您将使用简单联接。或者让我们知道你需要它做什么。查看我的答案如果需要返回一行,可以使用mysql group_concat()函数,但最好使用单独的查询来获取post/terms关系。为什么在terms表中没有post_id列?我使用类似wordpress的term_关系,因为一篇文章有多个术语,所以最好的结果可能是将其拆分为两个单独的查询。您不必使用带有关系数据的表。只需将“post_id”列添加到terms表中。并且将有多行具有相同的“post_id”值。然后您将使用简单联接。或者让我们知道你需要它做什么。查看我的答案我使用两个查询,首先选择所有术语,然后使用group_concat。。。Thanks我使用两个查询,首先选择所有术语,然后使用group_concat。。。谢谢