0

表示するアニメーションをスケジュールできる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を取得しようとしています。この場合、私はid 49 /Animation_id22を探しています。

だからこれは私が思いついたものであり、それは機能しているようですが:

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;
  • それを行うためのより良い方法はありますか?
  • 私は正しい結果を得ていますか?
4

1 に答える 1

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
    )
于 2012-06-28T11:35:15.437 に答える