Forum:Sql Query For Badges
0
0
Entering edit mode
12.1 years ago

Calling on all SQL novices and gurus to help us create queries to award badges. We're looking for queries that return a set of users that qualify for a badge.

An typical query selects users by one condition and excludes users that already have that award. If the query gets too long/slow it is acceptable to do the exclusion in a separate step.

Here are the relevant sections of the schemas:

BEGIN;
CREATE TABLE auth_user (
    id integer NOT NULL,
    username character varying(30) NOT NULL,
    first_name character varying(30) NOT NULL,
    last_name character varying(30) NOT NULL,
    email character varying(75) NOT NULL,
    password character varying(128) NOT NULL,
    is_staff boolean NOT NULL,
    is_active boolean NOT NULL,
    is_superuser boolean NOT NULL,
    last_login timestamp with time zone NOT NULL,
    date_joined timestamp with time zone NOT NULL
);
CREATE TABLE "server_userprofile" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
    "display_name" varchar(250) NOT NULL,
    "type" integer NOT NULL,
    "uuid" text NOT NULL UNIQUE,
    "score" integer NOT NULL,
    "bronze_badges" integer NOT NULL,
    "silver_badges" integer NOT NULL,
    "gold_badges" integer NOT NULL,
    "new_messages" integer NOT NULL,
    "last_visited" datetime NOT NULL,
    "status" integer NOT NULL,
    "about_me" text,
    "about_me_html" text,
    "location" text,
    "website" varchar(250),
    "my_tags" text,
    "scholar" text
)
;
CREATE TABLE "server_tag" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" text NOT NULL,
    "count" integer NOT NULL
)
;
CREATE TABLE "server_post_tag_set" (
    "id" integer NOT NULL PRIMARY KEY,
    "post_id" integer NOT NULL,
    "tag_id" integer NOT NULL REFERENCES "server_tag" ("id"),
    UNIQUE ("post_id", "tag_id")
)
;
CREATE TABLE "server_post" (
    "id" integer NOT NULL PRIMARY KEY,
    "author_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "content" text NOT NULL,
    "html" text NOT NULL,
    "title" text NOT NULL,
    "slug" varchar(200) NOT NULL,
    "tag_val" varchar(200) NOT NULL,
    "views" integer NOT NULL,
    "score" integer NOT NULL,
    "full_score" integer NOT NULL,
    "creation_date" datetime NOT NULL,
    "lastedit_date" datetime NOT NULL,
    "lastedit_user_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "status" integer NOT NULL,
    "type" integer NOT NULL,
    "root_id" integer,
    "parent_id" integer,
    "comment_count" integer NOT NULL,
    "revision_count" integer NOT NULL,
    "answer_count" integer NOT NULL,
    "accepted" bool NOT NULL,
    "url" varchar(200) NOT NULL,
    "rank" real NOT NULL
)
;
CREATE TABLE "server_blog" (
    "id" integer NOT NULL PRIMARY KEY,
    "author_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "url" varchar(500) NOT NULL
)
;
CREATE TABLE "server_postrevision" (
    "id" integer NOT NULL PRIMARY KEY,
    "post_id" integer NOT NULL REFERENCES "server_post" ("id"),
    "diff" text NOT NULL,
    "content" text NOT NULL,
    "author_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "date" datetime NOT NULL
)
;
CREATE TABLE "server_vote" (
    "id" integer NOT NULL PRIMARY KEY,
    "author_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "post_id" integer NOT NULL REFERENCES "server_post" ("id"),
    "type" integer NOT NULL,
    "date" datetime NOT NULL
)
;
CREATE TABLE "server_badge" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL,
    "description" varchar(200) NOT NULL,
    "type" integer NOT NULL,
    "unique" bool NOT NULL,
    "secret" bool NOT NULL,
    "count" integer NOT NULL
)
;
CREATE TABLE "server_award" (
    "id" integer NOT NULL PRIMARY KEY,
    "badge_id" integer NOT NULL REFERENCES "server_badge" ("id"),
    "user_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "date" datetime NOT NULL
)
;
COMMIT;
meta biostars • 2.5k views
ADD COMMENT
0
Entering edit mode

Do you still need an help about this topic?

ADD REPLY
0
Entering edit mode

yes, this is still an active field of discussion, queries in Django ORM form are here:

https://github.com/ialbert/biostar-central/blob/master/main/server/awards.py

but you can formulate them in real SQL as well

ADD REPLY

Login before adding your answer.

Traffic: 1919 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6