2012-01-27 59 views
0

我有以下功能:按用户级别从MySql表中选择所有ID并存储数组中每个级别的ID数量?

//Counts The Users In The Database Per Level And Stores The Results In An Array 
public function countUsers() { 
    $users = array(); 
    $length = array(); 
    for($i = 0; $i >= 2; $i++){ 
     $sql = "SELECT user_id FROM users WHERE user_level = '$i'"; 
     if ($stmt = $this->connect->prepare($sql)) { 
      $stmt->bind_result($id); 
      $stmt->execute(); 
      while ($row = $stmt->fetch()) { 
       $stmt->bind_result($id); 
       $users[] = $id; 
      } 
      $stmt->close(); 
      $length[] = sizeof($users); 
     } else { 
      $error    = true; 
      $message['error'] = true; 
      $message['message'] = CANNOT_PREPARE_DATABASE_CONNECTION_MESSAGE; 
      return json_encode($message); 
     } 
    } 
    return $length; 
} 

此功能是通过表假设循环和存储的ID在每个级别的阵列,然后让每个级别每个阵列的sizeof。我的意思是,我有10个用户0级,23级1级等等,我需要这个信息存储在一个数组中。

我的功能有什么问题?

+3

'为($ i = 0; $ I> = 2; $ i ++){'有趣...... – dfsq 2012-01-27 19:53:49

+0

对于其中一个,FOR循环将永远运行。实际上,它永远不会运行... – 2012-01-27 19:55:22

+0

不,那个for循环将永远不会运行。 – Wrikken 2012-01-27 19:58:36

回答

5

你可以让SQL为你做更多的工作吗?

SELECT user_level,COUNT(user_id) usercount 
FROM  users 
GROUP BY user_level; 

这将为您提供每个用户级别的所有计数。

+0

好吧,我将如何输出到PHP? – Roland 2012-01-27 20:17:28

+0

使用fetchall:http://www.php.net/manual/en/pdostatement.fetchall.php – 2012-01-30 17:24:17

1
$users = array(); 

应该在for循环中。 但是,如果你改变你的SQL查询会好得多:

"SELECT COUNT(*) FROM users WHERE user_level = '$i'" 

或会更好,如果你使用GROUP BY子句

+0

是的,将'$ users'变量放置在for内部就行了。 – Roland 2012-01-27 20:21:15

相关问题