1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00
royalnet/query_discord_music.py
2018-07-28 22:21:04 +02:00

120 lines
No EOL
3.3 KiB
Python

all_query = """SELECT
discord.royal_id,
discord.discord_id,
discord.name,
discord.discriminator,
discord.avatar_hex,
fav_songs.fav_song,
fav_songs.max_plays,
last_songs.last_song,
last_songs.last_play_time
FROM discord
LEFT JOIN (
SELECT DISTINCT ON (ma.discord_id)
ma.discord_id discord_id,
fs.fav_song fav_song,
ma.max_plays max_plays
FROM (
SELECT
discord_id,
max(plays) max_plays
FROM
(
SELECT
playedmusic.enqueuer_id discord_id,
playedmusic.filename fav_song,
count(*) plays
FROM playedmusic
GROUP BY playedmusic.filename, playedmusic.enqueuer_id
ORDER BY plays DESC
) play_counts
GROUP BY discord_id
) ma
INNER JOIN
(
SELECT
playedmusic.enqueuer_id discord_id,
playedmusic.filename fav_song,
count(*) plays
FROM playedmusic
GROUP BY playedmusic.filename, playedmusic.enqueuer_id
ORDER BY plays DESC
) fs ON fs.discord_id = ma.discord_id AND fs.plays = ma.max_plays
) fav_songs ON fav_songs.discord_id = discord.discord_id
LEFT JOIN
(
SELECT DISTINCT ON (playedmusic.enqueuer_id)
playedmusic.enqueuer_id discord_id,
playedmusic.filename last_song,
last_play_times.last_play_time
FROM playedmusic
JOIN (
SELECT
playedmusic.enqueuer_id discord_id,
max(playedmusic.timestamp) last_play_time
FROM playedmusic
GROUP BY playedmusic.enqueuer_id
) last_play_times ON playedmusic.timestamp = last_play_times.last_play_time
) last_songs ON last_songs.discord_id = discord.discord_id;"""
# TODO: can and should be optimized, but I'm too lazy for that
one_query = """SELECT
discord.royal_id,
discord.discord_id,
discord.name,
discord.discriminator,
discord.avatar_hex,
fav_songs.fav_song,
fav_songs.max_plays,
last_songs.last_song,
last_songs.last_play_time
FROM discord
LEFT JOIN (
SELECT DISTINCT ON (ma.discord_id)
ma.discord_id discord_id,
fs.fav_song fav_song,
ma.max_plays max_plays
FROM (
SELECT
discord_id,
max(plays) max_plays
FROM
(
SELECT
playedmusic.enqueuer_id discord_id,
playedmusic.filename fav_song,
count(*) plays
FROM playedmusic
GROUP BY playedmusic.filename, playedmusic.enqueuer_id
ORDER BY plays DESC
) play_counts
GROUP BY discord_id
) ma
INNER JOIN
(
SELECT
playedmusic.enqueuer_id discord_id,
playedmusic.filename fav_song,
count(*) plays
FROM playedmusic
GROUP BY playedmusic.filename, playedmusic.enqueuer_id
ORDER BY plays DESC
) fs ON fs.discord_id = ma.discord_id AND fs.plays = ma.max_plays
) fav_songs ON fav_songs.discord_id = discord.discord_id
LEFT JOIN
(
SELECT DISTINCT ON (playedmusic.enqueuer_id)
playedmusic.enqueuer_id discord_id,
playedmusic.filename last_song,
last_play_times.last_play_time
FROM playedmusic
JOIN (
SELECT
playedmusic.enqueuer_id discord_id,
max(playedmusic.timestamp) last_play_time
FROM playedmusic
GROUP BY playedmusic.enqueuer_id
) last_play_times ON playedmusic.timestamp = last_play_times.last_play_time
) last_songs ON last_songs.discord_id = discord.discord_id
WHERE discord.royal_id = :royal;"""