如何获得最新价值并删除旧价值?

时间:2015-04-09 03:32:17

标签: mysql

我正在制作一个sql命令,每次用户提出问题或回答问题时都会得到最新的值。但是当我得到答案值时会出现错误,它会得到所有答案&题 。我想只获得最新的asnwer。示例:

|    postid | type    | parentid | 
|---------  |---------|-----------
| 97        |       A |         92 
| 96        |       A |         93
| 95        |       A |         93
| 94        |       Q |        NULL
| 93        |       Q |        NULL
| 92        |       Q |        NULL
| 91        |       Q |        NULL

我尝试使用groupby(parentid)。但它没有任何问题。像这样:

|    postid | type    | parentid | 
|---------  |---------|-----------
| 97        |       A |         92
| 96        |       A |         93

但我想得到:     最新答案(在回答之前没有得到答案+这个答案的问题)     问题(如果没有答案,请保留此问题)

|    postid | type    | parentid | 
|---------  |---------|-----------
| 97        |       A |         92
| 96        |       A |         93
| 94        |       Q |        NULL
| 91        |       Q |        NULL

这是我的代码:

 SELECT `p`.* 
FROM `qa_posts` `p`
JOIN `user_member` `u` ON u.user_id = p.userid
LEFT JOIN `user_profile` `pr` ON u.user_id = pr.user_id
WHERE p.is_deleted =0
GROUP BY `p`.`parent_id`
ORDER BY `p`.`postid` DESC LIMIT 10

1 个答案:

答案 0 :(得分:1)

这个怎么样?

select max(postid), type, parentid
  from posts
    group by type, parentid

小提琴:http://sqlfiddle.com/#!9/357ce/1

修改
好吧,似乎我可能误解了,你想要所有未解答的问题,加上其他问题的最新答案,但不是那些有答案的问题?如果是这样,我们可以使用UNION轻松完成此操作,这样做:

select max(postid) p, type, parentid
  from posts
    where type = 'A'
    group by parentid
union
  select p1.postid, p1.type, p1.parentid
    from posts p1
      left join posts p2
        on p1.postid = p2.parentid
      where p2.parentid is null and p1.type = 'Q'
order by p desc;

这里有一个更新的小提琴:http://sqlfiddle.com/#!9/05667/17