2012-04-29 17 views
1

我试着用术语表加入我的发布表行,我的数据库发布和数据库结构与wordpress相同,我不知道如何将多行加入一行;如何使用条款查询一个帖子?

明显的例子:

交表:

post_id 
post_title 
post_content 
post_dateline 
post_owner 

术语表:

term_id 
term_name 
term_title 
term_type 

term_relationships表:

post_id 
term_id 

现在我有: 一个id值为3的帖子; 三个学期用的ID值(4,6,7)

term_relationships像行:

post_id  term_id 
    3   4 
    3   6 
    3   7 

能够获得所有这些信息与一个查询,或者我应该先查询职位,然后尝试获取方面信息?

+1

如果您需要返回单个行,那么还有mysql group_concat()函数,但您最好使用单独的查询来获取帖子/术语关系。 –

+0

为什么你在表格中没有post_id列? – miro

+0

我使用word_report这样的term_relationships,因为一个职位有多个条款 –

回答

1

使用GROUP_CONCAT函数,它将加入多行单行,但给你的结果作为一个逗号分隔的领域。

+0

我用了两个查询,首先选择所有条件,然后用group_concat来...谢谢 –

0

您要寻找的加入类型是LEFT JOIN。事情是这样的:

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 
0

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

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 
0

开始一个与你的映射表连接,并添加数据使用两个表上的左连接?

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 
0

你需要什么?我认为使用一个查询来获得它是非常不利的。

为什么不使用两个查询?

SELECT * FROM posts; 
SELECT * FROM terms WHERE term_id IN (SELECT term_id FROM term_relationships WHERE post_id = $post_id); 

对不起的mysql我的英语