diff options
| author | Nathan Perry <avaglir@gmail.com> | 2019-03-30 10:42:29 -0400 |
|---|---|---|
| committer | Nathan Perry <avaglir@gmail.com> | 2019-03-30 10:44:35 -0400 |
| commit | 2b05cde092d0bfde28739f2f8e1ee0ab4deae181 (patch) | |
| tree | b74b93c112f07146a36c6cd0fc9d3fc5ec31272f | |
| parent | 419af1fa7fa6fe78eda1c9653f9438da36a9853d (diff) | |
further clean up rare meme query
| -rw-r--r-- | src/db/mod.rs | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs index 5abf634..a331ead 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -126,20 +126,31 @@ pub fn rare_meme(conn: &PgConnection, audio: bool) -> Result<Meme> { let rows = raw_conn.query(r#" WITH meme_count AS ( - SELECT meme_id, COUNT(*) AS ct FROM invocation_records GROUP BY meme_id + SELECT + meme_id, + COUNT(*) AS ct + FROM invocation_records + GROUP BY meme_id ), aggregate AS ( - SELECT memes.id AS meme_id, COALESCE(meme_count.ct, 0) AS ct, EXTRACT(EPOCH FROM (now() - metadata.created)) AS time_diff + SELECT + memes.id AS meme_id, + COALESCE(meme_count.ct, 0) AS ct, + EXTRACT(EPOCH FROM (now() - metadata.created)) AS time_diff FROM meme_count - RIGHT JOIN memes ON memes.id = meme_count.meme_id - INNER JOIN metadata ON metadata.id = memes.metadata_id + RIGHT JOIN memes ON memes.id = meme_count.meme_id + INNER JOIN metadata ON metadata.id = memes.metadata_id WHERE (memes.audio_id IS NULL) = $1 OR $2 ), least_used AS ( - SELECT meme_id, TRUNC(time_diff / (ct + 1)) as play_prop + SELECT + meme_id, + TRUNC(time_diff / (ct + 1)) as play_prop FROM aggregate ) - SELECT meme_id, sum(play_prop) OVER (ORDER BY play_prop DESC) as play_prop + SELECT + meme_id, + sum(play_prop) OVER (ORDER BY play_prop DESC) as play_prop FROM least_used LIMIT 100; "#, &[&!audio, &audio])?; @@ -152,12 +163,6 @@ pub fn rare_meme(conn: &PgConnection, audio: bool) -> Result<Meme> { return Err(err_msg("no rare memes found")); } - let total_probability_mass: i64 = elems.iter().map(|(_, prob)| prob).sum(); - - if total_probability_mass == 0 { - return Err(err_msg("rare meme probability mass was 0")) - } - let mut rng = thread_rng(); let target_prob = rng.gen_range(0, elems.last().unwrap().1); |
