2012-08-28 26 views
0

我有两个表SQL查询和回复

post Table 
post_id 
post_name 
post_summary 
date 

post_reply Table 
parent_id 
post_id 

所以我在做什么是我在交表的插图一个新职位的细节,如果有该帖子的任何答复,然后我把所有的细节在发布表本身中,并且还将主发布标识存储为parent_id,并在post_reply中将发布标识作为post_id进行回复。

现在我想获取主帖子下的所有帖子和回复,如果有任何并希望显示在我的jsp页面上。

我无法编写单个查询来获取这些详细信息。我可以这样做,首先获取其ID不在post_reply中的所有帖子,然后在所有帖子中循环,然后获取主帖和逐一回复的帖子。

我只想在一个查询中获取所有这些。这可能吗?我使用mysql作为数据库,并使用mybatis的spring mvc。所以我感觉整个列表并将其放入我的模型属性中,并将其显示在jsp页面上。

如果有人可以建议我一个更好的方式来实现这个改变我的数据库结构或任何其他解决方案,那就太好了。

+0

您是否尝试过做什么了吗?看看使用JOIN – bretterer

回答

0

表后您的回复表

 
+---------+-------+---------+ 
| post_id | post | comment | 
+---------+-------+---------+ 
|  1 | kjasd | ajsdh | 
|  2 | abc | dfgdfg | 
|  3 | ashdf | NULL | 
+---------+-------+---------+ 

表post_reply

 
+-----------+---------+ 
| parent_id | post_id | 
+-----------+---------+ 
|   1 |  2 | 
+-----------+---------+ 

使用该查询它工作:

select *from post where post_id=1 or post_id in (select post_id from post_reply where parent_id=1); 

它会返回与父母后,只有在没有家长的答复后回复..

+0

嗨Astrowalker谢谢,这似乎是一个很好的查询,但我怎么可以在运行时取代硬编码的post_id? – user965884

+0

试试这个,但你不能得到没有帖子id的帖子的具体细节... select * from post where post_id in(select post_id from post_reply where parent_id = post_id); – Aravind

+0

不,它返回零行 – user965884

0

您想将两个表连接在一起。

例如,

SELECT  * 
FROM  post 
INNER JOIN post_reply 
ON   post.post_id = post_reply.post_id 

我不是从你的问题肯定你是什么后,但如果你想要的东西,这并不这样做,你可能想使用GROUP BY。

0

这是一个相当简单的Join查询,这样做我会想。请尝试以下操作:

SELECT * FROM post pt JOIN (post_reply pr) ON pr.parent_id = pt.post_id 

你会再通过结果在PHP这样

while($row = mysql_fetch_array($your_query)) { 
    $parent_id = $row['post_id']; 
    $reply_id = $row['post_id']; 
    $content = $row['post_summary']; 
} 

循环然后,您可以从细节打造上述