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

时间:2016-11-02 19:16:53

标签: php mysql count

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

我不确定我怎么做:

- 计算用户的总ID数。 - 为用户设置status列的值,然后添加它们。

有人能指出我正确的方向吗?

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_total_sql = "
        SELECT sum(status) as sumna, 
        COUNT(*) as cnt 
        FROM goals
        WHERE user_id = ?
    ";

    if ($goal_total_stmt = $con->prepare($goal_total_sql)) {
        $goal_total_stmt->execute(array($user_id));
        $rows = $goal_total_stmt->fetchAll(PDO::FETCH_ASSOC);
        foreach ($rows as $row) {
            $actual_status = $row['status'];
            $total_status = $row['id'];
        }   
    }
?>
    <div id="main">
    <?php
    echo "Actual:". $actual_status;
    echo "Total". $total_status;
    ?>

3 个答案:

答案 0 :(得分:1)

SELECT status_id FROM goals WHERE userId = ? GROUP BY status_id应计算每个州的ID数量

答案 1 :(得分:-1)

我很难在这里说出你需要什么,因为问题标题与身体相矛盾,而且两者都提供了代码。但据我所知

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

答案 2 :(得分:-1)

SELECT COUNT(*) as goal_count, status FROM goals WHERE user_id = ? GROUP BY status;

这将以表格格式显示状态旁边的goal_count。

这是一个sqlfiddle: http://sqlfiddle.com/#!9/1bb23

所以使用你的创建表的修改版本(你应该使用Innodb,为了简单起见我省略了Collac)

你的结果应该是这样的:

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