Php 如何从数据库列获取所有值

Php 如何从数据库列获取所有值,php,mysql,count,Php,Mysql,Count,我有一个我正在创建的基本系统,用户在其中创建目标。插入目标时,status列的值为0。当目标完成时,该值更新为1。因此,我试图做的是获取特定用户(当前会话的用户)的ID总数(目标数量的行),然后获取status列的值,然后计算这些值。一旦添加了实际的status列值,我想将其除以id的总数。我基本上是想弄清楚如何获得一个完成率 我不确定如何才能: -计算用户的总id数。 -获取用户的状态列的值,然后添加这些值 谁能给我指出正确的方向吗 Table Create Table goals CREAT

我有一个我正在创建的基本系统,用户在其中创建目标。插入目标时,
status
列的值为0。当目标完成时,该值更新为1。因此,我试图做的是获取特定用户(当前会话的用户)的ID总数(目标数量的行),然后获取
status
列的值,然后计算这些值。一旦添加了实际的
status
列值,我想将其除以id的总数。我基本上是想弄清楚如何获得一个完成率

我不确定如何才能:

-计算用户的总id数。 -获取用户的
状态
列的值,然后添加这些值

谁能给我指出正确的方向吗

Table
Create Table
goals
CREATE TABLE `goals` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `user_id` int(11) NOT NULL,
 `title` text COLLATE utf8_unicode_ci NOT NULL,
 `description` text COLLATE utf8_unicode_ci NOT NULL,
 `status` int(5) NOT NULL,
 `importance` int(5) NOT NULL,
 `date` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_c


$select_goals_sql = "
    SELECT *
    FROM goals
    WHERE user_id = ?
    ORDER BY id DESC    
";

if ($select_goals_stmt = $con->prepare($select_goals_sql)) {
    $select_goals_stmt->execute(array($user_id));
    $rows = $select_goals_stmt->fetchAll(PDO::FETCH_ASSOC);
    $goals = array();
    foreach ($rows as $row) {
        $goal_date = $row['date'];
        $fixed_goal_date = fixDate($goal_date);
        // the varialbe I will name it $status_completed = 
        $html = "";
编辑:

$goal\u total\u sql=”
选择sum(状态)作为sumna,
将(*)计数为cnt
来自目标
其中user_id=?
";
如果($goal\u total\u stmt=$con->prepare($goal\u total\u sql)){
$goal_total_stmt->execute(数组($user_id));
$rows=$goal\u total\u stmt->fetchAll(PDO::FETCH\u ASSOC);
foreach($行作为$行){
$actual_status=$row['status'];
$total_status=$row['id'];
}   
}
?>

我很难说出您在这里需要什么,因为问题标题与正文和提供的代码相矛盾。但据我所知

SELECT sum(status) as summa, COUNT(*) as cnt FROM ...

从userId=?按状态分组\u id
应统计每个状态的id数

SELECT COUNT(*) as goal_count, status FROM goals WHERE user_id = ? GROUP BY status;
这将以表格形式显示状态旁边的目标计数

下面是一个sqlfiddle:

因此,使用修改后的create表(您应该使用Innodb,为了简单起见,我使用了Collac)

您的结果应该是这样的:

+------------+--------+                                                                                                                                                                                             
| goal_count | status |                                                                                                                                                                                             
+------------+--------+                                                                                                                                                                                             
|          1 |      1 |                                                                                                                                                                                             
|          2 |      2 |                                                                                                                                                                                             
|          2 |      3 |                                                                                                                                                                                             
|          2 |      4 |                                                                                                                                                                                             
+------------+--------+   

我不确定是否有一种方法可以让PHP不必再创建另一个查询就可以做到这一点,因为我已经在与相关数据库建立连接。您的查询获得完成率,但是否仍需要获得完成率,然后获得id和
状态的不可更改的总数,其中一个作为值,或者我还需要对这些进行另一次查询?我看到您进行了编辑。既然在查询中定义了这些变量,那么我如何将它们执行到变量中呢?我只是编辑了我的问题,以显示我在做什么。变量是未定义的,但每当我将foreach添加回并将结束括号扩展到回音之后,页面将变为空白。为了获得学习基本PDO所需的选定值,请显示它们。我无法理解为什么你总是试图展示其他价值观
+------------+--------+                                                                                                                                                                                             
| goal_count | status |                                                                                                                                                                                             
+------------+--------+                                                                                                                                                                                             
|          1 |      1 |                                                                                                                                                                                             
|          2 |      2 |                                                                                                                                                                                             
|          2 |      3 |                                                                                                                                                                                             
|          2 |      4 |                                                                                                                                                                                             
+------------+--------+