我有以下功能:
//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存储在每个级别的数组中,然后获得每个级别的每个数组的大小。我的意思是,我有10个用户为0级,23个为1级,依此类推,我需要将这些信息存储在一个数组中。
我的功能出了什么问题?
答案 0 :(得分:5)
你能让SQL为你做更多的工作吗?
SELECT user_level,COUNT(user_id) usercount
FROM users
GROUP BY user_level;
这将为您提供每个用户级别的所有计数。
答案 1 :(得分:1)
$users = array();
应该在for循环中。 但是如果将sql查询更改为:
,会好得多"SELECT COUNT(*) FROM users WHERE user_level = '$i'"
或者如果使用GROUP BY子句
会更好