ステーションのある音楽プレーヤーを作成しています。履歴と呼ばれるテーブルがあります。ユーザーが好き、嫌い、スキップした曲に関するデータがあります。私たちは、人が曲を気に入った、または気に入らなかった回数を常に保存します。特定のステーションでユーザーが好き (event_type=1) または嫌い (event_type=2) にしたすべての曲の現在のスナップショットを取得したいと考えています。
テーブルには次の行があります。
- id(PK int 自動インクリメント)
- station_id(FK int)
- song_id(FK int)
- event_type(int、1、2、または 3 のいずれか)
これが私のクエリです:
SELECT song_id, event_type, id 
FROM histories 
WHERE id IN (SELECT MAX(id) AS id 
             FROM histories 
             WHERE station_id = 187 
               AND (event_type=1 OR event_type=2) 
             GROUP BY station_id, song_id)  
ORDER BY id;
内部選択なしでこのクエリを実行する方法はありますか? これがなければ、これはずっと速く実行されると確信しています