50 lines
1.4 KiB
MySQL
50 lines
1.4 KiB
MySQL
|
BEGIN;
|
||
|
|
||
|
--UPDATE version SET minor = 5;
|
||
|
|
||
|
CREATE OR REPLACE PROCEDURE update_vote_points(normaluser int, follower int, subscriber int)
|
||
|
LANGUAGE SQL
|
||
|
AS $$
|
||
|
UPDATE config SET normaluservotepoints = normaluser,
|
||
|
followervotepoints = follower, subscribervotepoints = subscriber;
|
||
|
CALL update_scores();
|
||
|
$$;
|
||
|
|
||
|
CREATE TABLE follows (
|
||
|
userid integer,
|
||
|
PRIMARY KEY (userid)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE subscriptions (
|
||
|
userid integer,
|
||
|
PRIMARY KEY (userid)
|
||
|
);
|
||
|
|
||
|
CREATE OR REPLACE VIEW vote_score_vw AS
|
||
|
WITH votepoints AS (SELECT normaluservotepoints, followervotepoints, subscribervotepoints FROM config)
|
||
|
SELECT requests.url AS url,
|
||
|
COUNT(votes.requesturl) AS count,
|
||
|
COALESCE(
|
||
|
SUM(CASE
|
||
|
WHEN follows.userid IS NULL AND subscriptions.userid IS NULL
|
||
|
THEN votepoints.normaluservotepoints
|
||
|
WHEN follows.userid IS NOT NULL AND subscriptions.userid IS NULL
|
||
|
THEN votepoints.followervotepoints
|
||
|
WHEN subscriptions.userid IS NOT NULL
|
||
|
THEN votepoints.subscribervotepoints
|
||
|
END), 0
|
||
|
) AS votescore
|
||
|
FROM requests
|
||
|
LEFT JOIN votes ON votes.requesturl = requests.url
|
||
|
LEFT JOIN users on votes.userid = users.userid
|
||
|
LEFT JOIN bans ON users.userid = bans.userid
|
||
|
LEFT JOIN follows ON users.userid = follows.userid
|
||
|
LEFT JOIN subscriptions ON users.userid = subscriptions.userid
|
||
|
CROSS JOIN votepoints
|
||
|
WHERE bans.userid IS NULL
|
||
|
GROUP BY url;
|
||
|
|
||
|
ALTER TABLE users DROP COLUMN isfollower, DROP COLUMN issubscriber;
|
||
|
|
||
|
COMMIT;
|