|
60 | 60 |
|
61 | 61 | // We will not use a view this time, performance is key
|
62 | 62 | $query = <<<SQL
|
| 63 | +-- COUNT all rows for each medal to get a single row per medal |
63 | 64 | SELECT a.award_id AS `id`, a.player_id AS `pid`, MAX(r.time_end) AS `earned`, MIN(r.time_end) AS `first`, COUNT(`level`) AS `level`
|
64 | 65 | FROM player_award AS a
|
65 | 66 | LEFT JOIN round AS r ON a.round_id = r.id
|
66 |
| -WHERE a.player_id=$pid |
| 67 | +WHERE a.player_id=$pid AND a.award_id BETWEEN 2000000 AND 2999999 |
67 | 68 | GROUP BY a.player_id, a.award_id
|
68 |
| -ORDER BY a.player_id; |
| 69 | +UNION ALL |
| 70 | +-- Don't GROUP badge/ribbon rows since we need to return all levels invidially (for ribbons) |
| 71 | +-- (selecting 0 as first since neither ribbons nor badges can be awarded more than once) |
| 72 | +SELECT a.award_id AS `id`, a.player_id AS `pid`, r.time_end AS `earned`, 0 AS `first`, `level` |
| 73 | +FROM player_award AS a |
| 74 | + LEFT JOIN round AS r ON a.round_id = r.id |
| 75 | +WHERE a.player_id=$pid AND a.award_id NOT BETWEEN 2000000 AND 2999999 |
| 76 | +ORDER BY `id`, `level`; |
69 | 77 | SQL;
|
70 | 78 |
|
71 | 79 |
|
72 | 80 | // Query and get all of the Players awards
|
73 | 81 | $stmt = $connection->query($query);
|
74 | 82 | while ($award = $stmt->fetch())
|
75 | 83 | {
|
76 |
| - // Ribbons will get a 'first' value of 0 |
77 |
| - $id = (int)$award['id']; |
78 |
| - $first = (($id > 2000000) && ($id < 3000000)) ? $award['first'] : 0; |
79 |
| - $Response->writeDataLine($id, $award['level'], $award['earned'], $first); |
| 84 | + $Response->writeDataLine($award['id'], $award['level'], $award['earned'], $award['first']); |
80 | 85 | }
|
81 | 86 |
|
82 | 87 | $Response->send();
|
|
0 commit comments