Add top_player_kills_{n} and _value placeholders

top_player_kills_day_{n}
top_player_kills_day_{n}_value
top_player_kills_month_{n}
top_player_kills_month_{n}_value
top_player_kills_total_{n}
top_player_kills_total_{n}_value
top_player_kills_week_{n}
top_player_kills_week_{n}_value

Affects issues:
- Close #2697
This commit is contained in:
Aurora Lahtela 2022-11-13 15:00:46 +02:00
parent f41796f079
commit 1ec6fc913a
2 changed files with 21 additions and 2 deletions

View File

@ -214,6 +214,7 @@ public class ServerPlaceHolders implements Placeholders {
List<TopCategoryQuery<Long>> queries = new ArrayList<>();
queries.addAll(createCategoryQueriesForAllTimespans("playtime", (index, timespan, parameters) -> TopListQueries.fetchNthTop10PlaytimePlayerOn(getServerUUID(parameters), index, System.currentTimeMillis() - timespan, System.currentTimeMillis())));
queries.addAll(createCategoryQueriesForAllTimespans("active_playtime", (index, timespan, parameters) -> TopListQueries.fetchNthTop10ActivePlaytimePlayerOn(getServerUUID(parameters), index, System.currentTimeMillis() - timespan, System.currentTimeMillis())));
queries.addAll(createCategoryQueriesForAllTimespans("player_kills", (index, timespan, parameters) -> TopListQueries.fetchNthTop10PlayerKillCountOn(getServerUUID(parameters), index, System.currentTimeMillis() - timespan, System.currentTimeMillis())));
for (int i = 0; i < 10; i++) {
for (TopCategoryQuery<Long> query : queries) {

View File

@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries.analysis;
import com.djrapitops.plan.identification.ServerUUID;
import com.djrapitops.plan.storage.database.queries.Query;
import com.djrapitops.plan.storage.database.sql.tables.KillsTable;
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
@ -40,7 +41,7 @@ public class TopListQueries {
WHERE + SessionsTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
AND + SessionsTable.SESSION_START + ">?" +
AND + SessionsTable.SESSION_END + "<?" +
GROUP_BY + "name" +
GROUP_BY + UsersTable.USER_NAME +
ORDER_BY + "playtime DESC" +
LIMIT + "10" +
OFFSET + "?";
@ -57,7 +58,7 @@ public class TopListQueries {
WHERE + SessionsTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
AND + SessionsTable.SESSION_START + ">?" +
AND + SessionsTable.SESSION_END + "<?" +
GROUP_BY + "name" +
GROUP_BY + UsersTable.USER_NAME +
ORDER_BY + "active_playtime DESC" +
LIMIT + "10" +
OFFSET + "?";
@ -66,6 +67,23 @@ public class TopListQueries {
serverUUID, after, before, n - 1);
}
public static Query<Optional<TopListEntry<Long>>> fetchNthTop10PlayerKillCountOn(ServerUUID serverUUID, int n, long after, long before) {
String sql = SELECT + UsersTable.USER_NAME + ", " +
"COUNT(1) as kills" +
FROM + KillsTable.TABLE_NAME + " k" +
INNER_JOIN + UsersTable.TABLE_NAME + " u on u." + UsersTable.USER_UUID + "=k." + KillsTable.KILLER_UUID +
WHERE + KillsTable.SERVER_UUID + "=?" +
AND + KillsTable.DATE + ">?" +
AND + KillsTable.DATE + "<?" +
GROUP_BY + UsersTable.USER_NAME +
ORDER_BY + "kills DESC" +
LIMIT + "10" +
OFFSET + "?";
return db -> db.queryOptional(sql, set -> new TopListEntry<>(set.getString(UsersTable.USER_NAME), set.getLong("kills")),
serverUUID, after, before, n - 1);
}
public static class TopListEntry<T> {
private final String playerName;
private final T value;