2018-07-28 17:58:23 +00:00
|
|
|
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
|
2018-07-28 20:21:04 +00:00
|
|
|
WHERE discord.royal_id = :royal;"""
|