我有一个我正在创建的基本系统,用户可以在其中创建目标。插入目标后,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;
?>
答案 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 |
+------------+--------+