X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Fdb.php;h=6d4080c26ceefaa17232503a9e49e82af096b8a3;hp=de549a5bd68a438f39b28c14cc603ac74af2b066;hb=ed0ffd0d14904b661622a29e95661fc03728c2c4;hpb=b568d14fe83e919b41452d8ae5b57a7dedc671cf diff --git a/include/db.php b/include/db.php index de549a5..6d4080c 100644 --- a/include/db.php +++ b/include/db.php @@ -439,6 +439,24 @@ function DB_get_all_names() $names = array(); $result = DB_query("SELECT fullname FROM User"); + + while($r = DB_fetch_array($result)) + $names[] = $r[0]; + + return $names; +} + +function DB_get_all_user_names_open_for_games() +{ + $names = array(); + + DB_query("DROP TEMPORARY TABLE IF EXISTS Usertmp;"); + DB_query("CREATE TEMPORARY TABLE Usertmp SELECT id,fullname FROM User;"); + DB_query("DELETE FROM Usertmp WHERE id IN (SELECT user_id FROM User_Prefs WHERE pref_key='open for games' and value='no')"); + + $result = DB_query("SELECT fullname FROM Usertmp"); + DB_query("DROP TEMPORARY TABLE IF EXISTS Usertmp;"); + while($r = DB_fetch_array($result)) $names[] = $r[0]; @@ -737,6 +755,15 @@ function DB_get_PREF($myid) else $PREF['sorting']='high-low'; + /* Open for new games */ + $r = DB_query_array("SELECT value FROM User_Prefs". + " WHERE user_id='$myid' AND pref_key='open for games'" ); + if($r) + $PREF['open_for_games'] = $r[0]; + else + $PREF['open_for_games']='yes'; + + return $PREF; } @@ -786,13 +813,18 @@ function DB_get_email_pref_by_uid($uid) function DB_get_unused_randomnumbers($userstr) { - $r = DB_query_array(" SELECT randomnumbers FROM Game". - " WHERE randomnumbers NOT IN". - " (SELECT randomnumbers FROM Game". - " LEFT JOIN Hand ON Game.id=Hand.game_id". - " WHERE user_id IN (". $userstr .")". - " GROUP BY randomnumbers". - " )"); + /* optimized version of this query using temporary tables (perhaps we should use a procedure here?). + First we create a copy of the Game table using just the gameid and the cards. + Then in a second round we delete all the gameids of games where our players are in. + At the end we return only the first entry in the temporary table. + */ + DB_query("DROP TEMPORARY TABLE IF EXISTS gametmp;"); + DB_query("CREATE TEMPORARY TABLE gametmp SELECT id,randomnumbers FROM Game;"); + DB_query("DELETE FROM gametmp WHERE id IN (SELECT game_id FROM Hand WHERE user_id IN (".$userstr."));"); + + $r = DB_query_array("SELECT randomnumbers FROM gametmp LIMIT 1;"); + DB_query("DROP TEMPORARY TABLE IF EXISTS gametmp;"); + if($r) return $r[0]; else @@ -1113,7 +1145,7 @@ function DB_get_exchanged_cards($hash) function DB_played_by_others($gameid) { $gameids = array(); - $result = DB_query("SELECT id FROM Game WHERE randomnumbers=(SELECT randomnumbers from Game where id=$gameid) and status='gameover'"); + $result = DB_query("SELECT id FROM Game WHERE randomnumbers=(SELECT randomnumbers FROM Game WHERE id=$gameid) AND status='gameover'"); while($r = DB_fetch_array($result)) if($r[0]!=$gameid) $gameids[]=$r[0];