默认情况下,parent_id
= 0。我想选择 parent_id
= 0 的所有记录,并且仅选择 parent_id
> 0 的最后一条记录.
我尝试了这个,但没有成功:
SELECT * FROM `articles`
IF `parent_id` > 0 THEN
GROUP BY `parent_id`
HAVING COUNT(`parent_id`) >= 1
END;
ORDER BY `time` DESC
我的意思是,如果有几条parent_id = 2的记录,则只应返回其中一条。另外,如果有多条parent_id = 5的记录,则仅返回其中一条。换句话说,除了parent_id = 0 的记录外,每个parent_id 的记录不得超过1 条。
解决办法是什么?
最佳答案
如果我很好地理解你的问题,你需要所有parent_id == 0的记录,并且只需要其他parent_id's'time'列的最大值的记录?我认为 parent_id
+ time
是唯一的。
SELECT a.* FROM `articles` a
INNER JOIN
(SELECT parent_id, MAX(`time`) AS `time` FROM `articles` WHERE parent_id >0) t
ON (t.parent_id = a.parent_id AND a.`time` = t.`time`)
UNION
SELECT * FROM `articles` WHERE parent_id = 0;
关于sql - MySQL:分组依据和 IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860699/