2012-01-27 43 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

相關問題