X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Fdb.php;h=27d639ebe3a7da832a7a30a55bccf33b4cc6ea25;hp=514bde271a48f2ce976c664ba94ff25c4211adb6;hb=193099c75801f128beb8f3bb9541a3cb70f24002;hpb=eb20bf1a0cae1192eb50c19220e72df8d971d8e7 diff --git a/include/db.php b/include/db.php index 514bde2..27d639e 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]; @@ -729,6 +747,23 @@ function DB_get_PREF($myid) else $PREF['autosetup']='no'; + /* Sorting */ + $r = DB_query_array("SELECT value FROM User_Prefs". + " WHERE user_id='$myid' AND pref_key='sorting'" ); + if($r) + $PREF['sorting'] = $r[0]; + 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; } @@ -778,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 randomnumbers IN (SELECT randomnumbers FROM Hand LEFT JOIN Game ON Game.id=game_id 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 @@ -812,6 +852,9 @@ function DB_set_recovery_password($user,$newpw) function DB_get_card_name($card) { + if($card==0) + return 'backside'; + $r = DB_query_array("SELECT strength,suite FROM Card WHERE id='$card'"); if($r) @@ -1105,7 +1148,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];