mirror of
https://codeberg.org/demostf/frontend.git
synced 2026-06-03 18:24:12 +02:00
optimize single player search
This commit is contained in:
parent
68b6421b9b
commit
3e79a76e1b
2 changed files with 36 additions and 22 deletions
|
|
@ -456,6 +456,16 @@ impl Filter {
|
||||||
.and_where(Expr::col((Alias::new("upload_user"), Users::SteamId)).eq(uploader));
|
.and_where(Expr::col((Alias::new("upload_user"), Users::SteamId)).eq(uploader));
|
||||||
}
|
}
|
||||||
if !self.players.is_empty() && self.players.len() < 19 {
|
if !self.players.is_empty() && self.players.len() < 19 {
|
||||||
|
if self.players.len() == 1 {
|
||||||
|
let player = &self.players[0];
|
||||||
|
query
|
||||||
|
.inner_join(
|
||||||
|
Players::Table,
|
||||||
|
Expr::col((Demos::Table, Demos::Id))
|
||||||
|
.equals((Players::Table, Players::DemoId)),
|
||||||
|
)
|
||||||
|
.and_where(Expr::col((Players::Table, Players::SteamId)).eq(player));
|
||||||
|
} else {
|
||||||
let mut player = self.players.iter();
|
let mut player = self.players.iter();
|
||||||
let mut players_arr = format!("array['{}'", player.next().unwrap());
|
let mut players_arr = format!("array['{}'", player.next().unwrap());
|
||||||
for player in player {
|
for player in player {
|
||||||
|
|
@ -466,19 +476,21 @@ impl Filter {
|
||||||
query
|
query
|
||||||
.inner_join(
|
.inner_join(
|
||||||
Players::Table,
|
Players::Table,
|
||||||
Expr::col((Demos::Table, Demos::Id)).equals((Players::Table, Players::DemoId)),
|
Expr::col((Demos::Table, Demos::Id))
|
||||||
|
.equals((Players::Table, Players::DemoId)),
|
||||||
)
|
)
|
||||||
.inner_join(
|
.and_where(
|
||||||
Users::Table,
|
Expr::col((Players::Table, Players::SteamId)).is_in(self.players.clone()),
|
||||||
Expr::col((Users::Table, Users::Id)).equals((Players::Table, Players::UserId)),
|
);
|
||||||
)
|
|
||||||
.and_where(Expr::col((Users::Table, Users::SteamId)).is_in(self.players.clone()));
|
|
||||||
query.group_by_col((Demos::Table, Players::Id));
|
query.group_by_col((Demos::Table, Players::Id));
|
||||||
query.and_having(
|
query.and_having(
|
||||||
Expr::cust(&players_arr)
|
Expr::cust(&players_arr)
|
||||||
.cast_as(Alias::new("varchar[]"))
|
.cast_as(Alias::new("text[]"))
|
||||||
.contained(Func::cust(ArrayAgg).arg(Expr::col((Users::Table, Users::SteamId)))),
|
.contained(
|
||||||
|
Func::cust(ArrayAgg).arg(Expr::col((Players::Table, Players::SteamId))),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,8 @@ pub enum Players {
|
||||||
Assists,
|
Assists,
|
||||||
#[iden = "deaths"]
|
#[iden = "deaths"]
|
||||||
Deaths,
|
Deaths,
|
||||||
|
#[iden = "steam_id"]
|
||||||
|
SteamId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue