我有一个scheduled_item表,可以安排动画显示。
播放动画后,其属性is_played将设置为true。
当播放完所有动画后,调度程序会将先前显示的动画添加到队列中,因此屏幕始终会播放一些动画。
当新动画到达时,需要在队列之前添加 - 理想情况下替换下一个要播放的项目。
schedule_item如下所示:
CREATE TABLE scheduled_item (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`animation_id` bigint(20) DEFAULT NULL,
`is_played` tinyint(1) NOT NULL DEFAULT '0'
);
有些行看起来像这样
+----+--------------+-----------+
| id | animation_id | is_played |
+----+--------------+-----------+
| 17 | 15 | 1 |
| 40 | 22 | 1 |
| 43 | 26 | 1 |
| 46 | 15 | 1 |
| 49 | 22 | 0 |
+----+--------------+-----------+
所以,我试图了解尚未播放的所有动画,但过去曾播放过。在这种情况下,我正在寻找id 49 / animation_id 22。
所以这就是我想出来的,它似乎正在起作用,但是:
SELECT item_id
FROM scheduled_item
GROUP BY animation_id
HAVING count( animation_id ) > 1
AND MIN( is_played ) < 1
AND MAX( is_played ) > 0
ORDER BY id ASC;
答案 0 :(得分:1)
尝试此查询 - 在这种情况下您不需要having
子句。
select item_id from scheduled_item
where is_played = 0 and
item_id in(
select p.item_id from scheduled_item p
where p.animation_id = animation_id and
p.item_id < item_id and is_played = 1
)