这是场景: 我正在开发一个类似于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。 所以问题是--->回答---->评论。
答案 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