2012-12-27 70 views
0

我想对用户发布的媒体发表评论和回复评论。 我的意见表的结构类似于:如何获得评论和回复?

commentId : parentCommentId : mediaId : userId : comment 

我要选择最近的10篇原文评论和他们的答复根据MediaId。

为此,我正在运行2个sql语句。

SELECT commentId FROM comments 
WHERE mediaId='3' AND parentCommentId='0' 
LIMIT 10; 

(这得到最近的原10个职位的commentIds。 后来我在下面使用这些commentIds)...

SELECT c.*,u.* FROM comments AS c 
JOIN users AS u on u.userId=c.userId 
WHERE parentCommentId IN --(*****commentIds from previous query*****); 

有没有更好的方式来做到这一点? Perhaphs使用JOIN

回答

1

如果你做出这样说:

SELECT c.*,u.* FROM comments c 
    JOIN users u on u.userId=c.userId 
    JOIN comments p_c on p_c.commentId = c.parentCommentId 
    WHERE p_c.mediaId='3' AND p_c.parentCommentId='0' 
    LIMIT 10; 
+2

保鲜膜别进整数报价时字段是键入'int'这将导致在表格中的每一行上投下,这会减慢甚至简单的查询 –

+0

@MichelFeldheim,我知道 - 它是从OP的sql复制粘贴 - 我们不知道这些字段是否是整数=) – k102

+0

k102感谢您的回答...我会放弃它,然后再回来标记为答案...我认为你的方式是最有效的方式吗?...也感谢@MichelFeldheim的建议...问候J – jon

0

这将是你的问题有用

SELECT c.*,u.* FROM comments AS c 
    INNER JOIN users AS u on u.userId=c.userId 
    INNER JOIN comments pc on pc.commentId = c.CommentId 
    WHERE pc.mediaId='3' AND pc.parentCommentId='0' 
    LIMIT 10; 
+0

谢谢你的回应,但是这样不工作,因为它只是选择parentCommentId ='0'的行...我需要它选择10最近与parentComentId = 0和他们的孩子(答复)...说k102的答案也无法正常工作..看到其他线程..再次感谢您的支持。 – jon