2011-07-09 65 views
1

我想找出哪个用户是不是在数据库中可用的其他比赛,我得到一个数组如下操纵多维数组,表示

$arr2=Array 
(
    (0) => Array 
     (
      (uid) => 1, 
      (game_id) => 22 
     ), 

    (1) => Array 
     (

      (uid) => 2, 
      (game_id) => 22 
     ) 
    (2) => Array 
     (

      (uid) => 1, 
      (game_id) => 23 
     ) 
    (3) => Array 
     (

      (uid) => 3, 
      (game_id) => 24 
     ) 
); 

例如用户1部分是在游戏22,23但不IN 24用户3只在游戏中24 我想知道哪个用户不参与其他游戏,问题是效率(执行速度) 以及如何在数组中表示,以便我可以使用它来显示。上帝的想法有它像 userid => notInGame,notInGame(CSV)?

+0

你能使用SQL? – Michas

+0

是的,我可以......但不知道什么sql查询触发 因为我想只有一个查询运行在页面上优化它的执行速度 – Rachit

回答

1

如何做到这一点在PHP的一个例子:

$array = array(
    array 
    (
     'uid' => 1, 
     'game_id' => 22 
    ), 
    array 
    (
     'uid' => 2, 
     'game_id' => 22 
    ), 
    array 
    (
     'uid' => 1, 
     'game_id' => 23 
    ), 
    array 
    (
     'uid' => 3, 
     'game_id' => 24 
    ), 

); 

$games = $users = array(); 

foreach($array as $value) 
{ 
    $games[]    = $value['game_id']; 
    $users[$value['uid']][] = $value['game_id']; 
} 

foreach($users as $uid => $user) 
{ 
    $users[$uid] = array_diff($games, $user); 
} 

print_r($users); 

结果(关键是uid):

Array 
(
    [1] => Array 
     (
      [3] => 24 
     ) 

    [2] => Array 
     (
      [2] => 23 
      [3] => 24 
     ) 

    [3] => Array 
     (
      [0] => 22 
      [1] => 22 
      [2] => 23 
     ) 

) 
0

下面是相当简单的查询,如果你不需要组ID 。该num场是一个数字组的用户是英寸

SELECT `uid`, COUNT(*) AS `num` 
FROM `a_table` 
GROUP BY `uid`; 

你会得到这样的事情

$arr2=Array 
(
    (0) => Array 
     (
      (uid) => 1, 
      (num) => 2 
     ), 

    (1) => Array 
     (

      (uid) => 2, 
      (num) => 1 
     ) 
    (2) => Array 
     (

      (uid) => 3, 
      (num) => 1 
     ) 
);