Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用mysql维护跨表多个用户的运行总数_Php_Mysql_Join_Sum_Database Trigger - Fatal编程技术网

Php 如何使用mysql维护跨表多个用户的运行总数

Php 如何使用mysql维护跨表多个用户的运行总数,php,mysql,join,sum,database-trigger,Php,Mysql,Join,Sum,Database Trigger,我试图建立一个简单的网站,用户运行,输入数据,这是存储在“活动”表。将有多个用户。表结构: CREATE TABLE users (id INT , username VARCHAR, password VARCHAR, total_distance INT); 及 创建表活动id INT、用户id INT、距离INT、持续时间INT 我们的想法是使用以下方法创建一个类: class Activity { public function viewMyActivity() { } publi

我试图建立一个简单的网站,用户运行,输入数据,这是存储在“活动”表。将有多个用户。表结构:

CREATE TABLE users (id INT , username VARCHAR, password VARCHAR, total_distance INT); 

创建表活动id INT、用户id INT、距离INT、持续时间INT

我们的想法是使用以下方法创建一个类:

class Activity { public function viewMyActivity() {  } public function viewAllActivity() {  } public function showUsersRanking() {  } }
随着用户添加活动数据,活动表将不断增长。我想为每个使用触发器更新用户表的用户保留一个运行总数?因此,他们可以更快地访问它,而不是每次用户需要他们的数据或用户的总数据时都查询整个活动表

例如:id=5的用户跑10公里,这将添加到用户中“总距离”列中的累积总距离中

Table activity id=33 user_id=5 distance 10 duration 55
Table users id=5 username='foo' password='bar' total_distance=18 duration=130
至于时间,我希望用户使用逗号分隔,例如1,3,持续1小时30分钟,然后以某种方式转换。现在应该有一个更简单的方法,但更关心距离

我希望这更清楚


感谢您的关注。

我不建议存储这些信息,因为这些信息可以从表中已有的数据推断出来。维护派生信息会给代码增加不必要的复杂性

相反,您可以使用视图,动态计算信息,并为您的数据提供始终最新的透视图:

create view user_view as
select 
    u.*, 
    coalesce(a.total_distance) total_distance, 
    coalesce(a.total_duration) total_duration
from users u
left join (
    select user_id, sum(distance) total_distance, sum(duration) total_duration
    from activity
    group by user_id
) a on a.user_id = u.user_id

如果您能显示表和数据,触发器是rigt方法,但是如果不查看表结构,就很难猜测时间,我不会为视图而烦恼。查询就可以了。