my ( $self, $c, $x, $y, $z ) = @_;
my $dbh = $c->model;
- $c->stash( comma => \&comma_value);
-
- my $query = $dbh->prepare(q{SELECT x,y,
- size, size_gain, size_gain_day,
- score,score_gain,score_gain_day,
- value,value_gain,value_gain_day,
- xp,xp_gain,xp_gain_day,
- sizerank,sizerank_gain,sizerank_gain_day,
- scorerank,scorerank_gain,scorerank_gain_day,
- valuerank,valuerank_gain,valuerank_gain_day,
- xprank,xprank_gain,xprank_gain_day,
- planets,planets_gain,planets_gain_day
- ,ticks_roiding, ticks_roided
- FROM galaxies g
- JOIN (SELECT x,y,count(CASE WHEN size_gain > 0 THEN 1 ELSE NULL END) AS ticks_roiding
+ my $query = $dbh->prepare(q{
+SELECT x,y
+ ,size, size_gain, size_gain_day
+ ,score,score_gain,score_gain_day
+ ,value,value_gain,value_gain_day
+ ,xp,xp_gain,xp_gain_day
+ ,sizerank,sizerank_gain,sizerank_gain_day
+ ,scorerank,scorerank_gain,scorerank_gain_day
+ ,valuerank,valuerank_gain,valuerank_gain_day
+ ,xprank,xprank_gain,xprank_gain_day
+ ,planets,planets_gain,planets_gain_day
+ ,ticks_roiding, ticks_roided
+ ,raid.tick AS last_raid, raid
+FROM galaxies g
+ JOIN (SELECT x,y,count(CASE WHEN size_gain > 0 THEN 1 ELSE NULL END) AS ticks_roiding
,count(CASE WHEN size_gain < 0 THEN 1 ELSE NULL END) AS ticks_roided
- FROM galaxies GROUP BY x,y) ga USING (x,y)
- WHERE tick = ( SELECT max(tick) AS max FROM galaxies)
- AND x = $1 AND y = $2
+ FROM galaxies GROUP BY x,y) ga USING (x,y)
+ LEFT OUTER JOIN (
+ SELECT DISTINCT ON (x,y) x,y,raid, tick
+ FROM (
+ SELECT raid,p.tick,x,y,count(*), sum(size) AS size
+ FROM raids r
+ JOIN raid_targets rt ON r.id = rt.raid
+ JOIN planet_stats p ON p.id = rt.planet AND p.tick = r.tick-12
+ WHERE x = $1 and y = $2
+ GROUP BY raid,p.tick,x,y
+ ) AS a
+ JOIN galaxies g USING (tick,x,y)
+ WHERE a.count::float / g.planets >= 0.5
+ ORDER BY x,y,tick
+ ) AS raid USING (x,y)
+
+WHERE g.tick = ( SELECT max(tick) AS max FROM galaxies)
+ AND x = $1 AND y = $2;
});
$query->execute($x,$y);
if ($c->check_user_roles(qw/stats_missions/)){
my $query = $dbh->prepare(q{
- SELECT DISTINCT ON (i.tick,x,y,z,t.id,i.name,i.amount) i.id,i.mission, i.name, i.tick, i.eta AS eta
- , i.amount, coords(x,y,z) AS coords, t.id AS planet
- FROM ((
- SELECT * FROM fleets
- WHERE sender = $1 AND tick > tick() - 14
- ) UNION (
- SELECT * FROM fleets WHERE sender = $1 AND mission = 'Full fleet'
- ORDER BY tick DESC LIMIT 5
- )
- ) i
- LEFT OUTER JOIN (planets
- NATURAL JOIN planet_stats) t ON i.target = t.id
- AND t.tick = ( SELECT MAX(tick) FROM planet_stats)
- WHERE i.uid = -1
- ORDER BY i.tick,x,y,z,t.id,i.name,i.amount,i.eta
- });
+(
+ SELECT DISTINCT ON (mission,name) fid,mission,name,tick, NULL AS eta
+ ,amount, NULL AS coords, planet, NULL AS back
+ FROM fleets f
+ WHERE planet = $1 AND tick <= tick() AND (
+ fid IN (SELECT fid FROM fleet_scans)
+ ) AND (
+ mission = 'Full fleet'
+ OR tick >= tick() - 12
+ )
+ ORDER BY mission,name,tick DESC
+) UNION (
+ SELECT DISTINCT ON (tick,x,y,z,mission,name,amount)
+ NULL as fid, i.mission, i.name, i.tick,eta
+ , i.amount, coords(x,y,z), t.id AS planet, back
+ FROM intel i
+ LEFT OUTER JOIN current_planet_stats t ON i.target = t.id
+ WHERE uid = -1 AND i.sender = $1 AND i.tick > tick() - 14 AND i.tick < tick() + 14
+ ORDER BY i.tick,x,y,z,mission,name,amount,back
+)
+ });
$query->execute($id);
my $ships = $dbh->prepare(q{SELECT ship,amount FROM fleet_ships
- WHERE id = ? ORDER BY num
+ WHERE fid = ? ORDER BY num
});
my @missions;
while (my $mission = $query->fetchrow_hashref){
my @ships;
- $ships->execute($mission->{id});
- if ($ships->rows != 0){
+ if ($mission->{fid}){
+ $ships->execute($mission->{fid});
while (my $ship = $ships->fetchrow_hashref){
push @ships,$ship;
}
+ push @ships, {ship => 'No', amount => 'ships'} if @ships == 0;
$mission->{ships} = \@ships;
}
push @missions,$mission;
$query = $dbh->prepare(q{
SELECT DISTINCT ON (i.tick,x,y,z,s.id,i.name,i.amount) i.id,i.mission, i.name, i.tick,eta
, i.amount, coords(x,y,z) AS coords, s.id AS planet
- FROM fleets i
+ FROM intel i
LEFT OUTER JOIN (planets
NATURAL JOIN planet_stats) s ON i.sender = s.id
AND s.tick = ( SELECT MAX(tick) FROM planet_stats)