LAYOUT: fixed the layout of the userpage a bit
[e-DoKo.git] / include / stats.php
1 <?php
2 /* make sure that we are not called from outside the scripts, 
3  * use a variable defined in config.php to check this
4  */
5 if(!isset($HOST))
6   exit;
7
8 $name  = $_SESSION["name"];
9 $email = DB_get_email('name',$name);
10
11 $myid = DB_get_userid('email',$email);
12 if(!$myid)
13   return;
14
15 output_status();
16
17 $PREF = DB_get_PREF($myid);
18
19 DB_update_user_timestamp($myid);
20
21 display_user_menu();
22
23 /* start statistics*/
24 echo "<div class=\"user wide\">\n";
25
26 /* always: if player logged in: add link to cards  */
27
28 /* total number of games */
29 echo "<p>The number of finished games on this server is: ";
30 $r = DB_query_array("SELECT COUNT(*) from Game".
31                     " WHERE status='gameover'");
32 $GameN =  $r[0];
33 echo " $GameN </p>\n";
34
35 echo "<p>The contra party wins in ";
36 $result = DB_query("SELECT COUNT(*) from Score".
37                    " LEFT JOIN Game ON Game.id=game_id".
38                    " WHERE score='againstqueens'".
39                    " AND Game.status='gameover'");
40 while( $r = DB_fetch_array($result))
41   echo $r[0];
42 echo " games.</p>\n";
43
44 /* longest and shortest game */
45 $r=DB_query("SELECT timediff(mod_date,create_date) ,session,id".
46             " FROM Game WHERE status='gameover'".
47             " ORDER BY time_to_sec(timediff(mod_date,create_date)) ASC LIMIT 1");
48
49 if($r)
50   {
51     $short= DB_fetch_array($r);
52     $names = DB_get_all_names_by_gameid($short[2]);
53     echo "<p> The shortest game took only ".$short[0]." hours and was played by  ".join(", ",$names).".<br />\n";
54   }
55
56 $r=DB_query("SELECT datediff(mod_date,create_date) ,session,id".
57             " FROM Game WHERE status='gameover'".
58             " ORDER BY time_to_sec(timediff(mod_date,create_date)) DESC LIMIT 1");
59 if($r)
60   {
61     $long= DB_fetch_array($r);
62     echo "The longest game took ".$long[0]." days.</p>\n";
63   }
64
65 $r=DB_query("SELECT COUNT(*) as c, session, id FROM Game ".
66             " GROUP BY session ORDER BY c DESC LIMIT 1");
67 if($r)
68   {
69     $long  = DB_fetch_array($r);
70     $names = DB_get_all_names_by_gameid($long[2]);
71     echo "<p>The longest session is session ".$long[1]." with ".$long[0].
72       " games played by ".join(", ",$names).".</p>\n";
73   }
74
75
76 /* number of solos */
77 $result = DB_query_array_all("SELECT type,COUNT(*) as c from Game".
78                              " WHERE status='gameover'".
79                              " GROUP BY type".
80                              " ORDER BY c DESC");
81 array_unshift($result,array("Type","Frequency"));
82 echo output_table($result,"Game types","stats");
83
84 /* break up solos in types */
85 $result = DB_query_array_all("SELECT solo,COUNT(*) as c from Game".
86                              " WHERE status='gameover'".
87                              " AND type='solo'".
88                              " GROUP BY solo".
89                              " ORDER BY c DESC");
90 array_unshift($result,array("Type","Frequency"));
91 echo output_table($result,"Kind of solos","stats");
92
93 /*
94  2 top user mit maximaler quote an solo (min 10 games)
95  
96  top scoring game: winning players
97  
98  game with the same cards: show 3 at random:
99  player who won, points, what kind of game
100  select g1.id, g2.id from game g1 left join game g2 on g1.randomnumbers=g2.randomnumbers where g1.id<g2.id order by g1.id
101  select id from game where randomnumbers like "blablabl%"; the % is like .* in regexp
102  select id,type,solo,status from game where id in (select id from game where randomnumbers in (select randomnumbers from game where id=27));
103  
104 */
105 $result = DB_query_array_all("SELECT fullname,COUNT(*) as c FROM Score".
106                              " LEFT JOIN User ON User.id=winner_id" .
107                              " WHERE score IN ('fox','doko','karlchen')".
108                              " GROUP BY game_id,fullname".
109                              " ORDER BY c DESC LIMIT 3" );
110 array_unshift($result,array("Name","Points"));
111 echo output_table($result,"Most extra points in a single game","stats");
112
113 /* most reminders */
114 $result = DB_query_array_all("SELECT fullname, COUNT(*)  /" .
115                              "      (SELECT COUNT(*) FROM Hand".
116                              "       WHERE user_id=User.id) as c".
117                              " FROM Reminder".
118                              " LEFT JOIN User ON User.id=user_id".
119                              " GROUP BY user_id".
120                              " ORDER BY c DESC LIMIT 5" );
121 array_unshift($result,array("Name","Reminders"));
122 echo output_table($result,"Most reminders per game","stats");
123
124 /* fox */
125 $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
126                              "      (SELECT COUNT(*) FROM Hand".
127                              "       WHERE user_id=User.id) as c".
128                              " FROM Score".
129                              " LEFT JOIN User ON User.id=winner_id".
130                              " WHERE score='fox'".
131                              " GROUP BY winner_id".
132                              " ORDER BY c DESC LIMIT 5" );
133 array_unshift($result,array("Name","Number of foxes caught"));
134 echo output_table($result,"Most caught foxes","stats");
135
136 $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
137                              "      (SELECT COUNT(*) FROM Hand".
138                              "       WHERE user_id=User.id) as c".
139                              " FROM Score".
140                              " LEFT JOIN User ON User.id=looser_id".
141                              " WHERE score='fox'".
142                              " GROUP BY looser_id".
143                              " ORDER BY c DESC LIMIT 5" );
144 array_unshift($result,array("Name","Number of foxes lost"));
145 echo output_table($result,"Lost foxes (most)","stats");
146
147 $result = DB_query_array_all("SELECT fullname, COUNT(*) /" .
148                              "      (SELECT COUNT(*) FROM Hand".
149                              "       WHERE user_id=User.id) as c".
150                              " FROM Score".
151                              " LEFT JOIN User ON User.id=looser_id".
152                              " WHERE score='fox'".
153                              " GROUP BY looser_id".
154                              " ORDER BY c ASC LIMIT 5" );
155 array_unshift($result,array("Name","Number of foxes lost"));
156 echo output_table($result,"Lost foxes (least)","stats");
157
158 /* which position wins the most tricks  */
159 $result = DB_query_array_all("SELECT CASE winner ".
160                              "   WHEN 1 THEN 'left' ".
161                              "   WHEN 2 THEN 'top' ".
162                              "   WHEN 3 THEN 'right' ".
163                              "   WHEN 4 THEN 'bottom' END,".
164                              " COUNT(*) AS c FROM Trick".
165                              " GROUP BY winner ".
166                              " HAVING LENGTH(winner)>0  ".
167                              " ORDER BY winner ASC " );
168 array_unshift($result,array("Position","Number of tricks"));
169 echo output_table($result,"Tricks at the table","stats");
170
171 /* most games */
172 $result = DB_query_array_all("SELECT fullname, COUNT(*) as c  " .
173                              " FROM Hand".
174                              " LEFT JOIN User ON User.id=user_id".
175                              " GROUP BY user_id".
176                              " ORDER BY c DESC LIMIT 7" );
177 array_unshift($result,array("Name","Number of games"));
178 echo output_table($result,"Most games","stats");
179
180 /* most solos */
181 $result = DB_query_array_all("SELECT fullname as fname,".
182                              "       COUNT(*), ".
183                              "       COUNT(*)/(SELECT COUNT(*) FROM Hand LEFT JOIN User ON User.id=Hand.user_id WHERE fullname=fname) as c ".
184                              " FROM Game ".
185                              " LEFT JOIN Hand ON Hand.position=startplayer AND Game.id=Hand.game_id ".
186                              " LEFT JOIN User ON User.id=Hand.user_id ".
187                              " WHERE type='solo' AND Game.solo<>'silent' AND Game.status='gameover' ".
188                              " GROUP BY user_id ".
189                              " ORDER BY c DESC;");
190 array_unshift($result,array("Name","Number of solos","Solos/game"));
191 echo output_table($result,"Most solos","stats");
192
193
194 /* most active games */
195 $result = DB_query_array_all("SELECT fullname, COUNT(*) as c  " .
196                    " FROM Hand".
197                    " LEFT JOIN User ON User.id=user_id".
198                    " LEFT JOIN Game ON Game.id=game_id".
199                    " WHERE Game.status<>'gameover'".
200                    " GROUP BY user_id".
201                    " ORDER BY c DESC LIMIT 7" );
202 array_unshift($result,array("Name","Number of active games"));
203 echo output_table($result,"Active games","stats");
204
205 /*
206  does the party win more often if they start
207  
208  echo "<p>The party playing first wins in";
209  $result = mysql_query("SELECT COUNT(*) from Score".
210  " LEFT JOIN Game ON Game.id=game_id".
211  " WHERE score='againstqueens'".
212  " AND Game.status='gameover'".
213  " AND Game.type<>'solo'");
214  while( $r = mysql_fetch_array($result,MYSQL_NUM))
215  echo $r[1]." (".$r[0].") <br />\n";
216  echo " games</p>\n";
217 */
218 $result = generate_global_score_table();
219 array_unshift($result,array("Name","Average score per game"));
220 echo output_table($result,"Points per game","stats");
221
222 /*
223  how often is the last trick a non-trump trick
224 */
225
226 echo "</div>\n"; /* end output */
227
228 ?>
229