如何编写这个具有挑战性的SQL(MySQL)命令?

时间:2009-12-16 11:09:09

标签: sql mysql join

这是场景: 我正在开发一个类似于stackoverflow.com的网站。 在提问者/寻求者发布他的问题后,其他用户可以发布他们对问题的回答。 用户可以针对同一问题发布多个答案,但通常只会显示最新答案。如果评论不被考虑,用户可以对答案发表评论, SQL语句是

mysql_query("SELECT * , COUNT( memberid ) AS num_revisions
FROM (
SELECT *
FROM answers
WHERE questionid ='$questionid'
ORDER BY create_moment DESC
) AS dyn_table JOIN users
USING ( memberid )
GROUP BY memberid order by answerid asc")or die(mysql_error());

当考虑注释时,将有三个表。 我想选择解算器在特定问题上给出的所有最新答案,求解器在问题上给出了多少答案(num_revisions),求解器的名称,对这些最新答案的评论。 如何编写这个SQL语句?我正在使用MySQL。

我希望你能理解我的问题。如果您不清楚我的问题,请要求澄清。

它比stackoverflow.com有点复杂。在stackoverflow.com上,您只能给出一个问题的答案。但是在我的网站上,用户可以多次回答问题。但只有最新的答案才能得到认真对待。

评论表的列是commentid,answerid,comment,giver,comment_time。 所以问题是--->回答---->评论。

2 个答案:

答案 0 :(得分:1)

您可以使用相关子查询,这样您只能获得每个成员的最新答案。这里的T-SQL就像你的例子一样(只针对给定问题的答案)。而你必须转换为mysql风味:

select *
from answers a
where questionid = '$questionid'
    and answerid in (select top 1 answerid 
            from answers a2 
            where a2.questionid = a.questionid 
                and a2.memberid = a.memberid 
            order by create_moment desc)
order by create_moment

您尚未提供评论表的架构,因此我还不能包括:)

-Krip

答案 1 :(得分:0)

这个怎么样(如果有多个评论,答案显然会重复):

选择* 来自答案a     左外连接注释c在c.answerid = a.answerid上     在u.memberid = a.memberid上加入用户u 其中questionid = 1     和a.answerid in(选择前1名答案             来自答案a2             其中a2.questionid = a.questionid                 和a2.memberid = a.memberid             按create_moment desc排序) 按a.create_moment命令,c.comment_time

-Krip