mysql - 如何计算列中的值并将每个列名称及其结果保存在一行中?

标签 mysql sql database

我正在为一些私有(private)网站制作数据库。在我的数据库中,我有一个名为 times 的表,我可以在其中保存用户名和用户空闲的时间。表格看起来像这样。

|uid |Monday|Tuesday |... |Saturday |Sunday |t12|t13|t14|...|t19|t20
_____________________________________________________________________

uid 是用户名,t12-t20 是时间(t16 = 1>星期一 = 1 表示用户在星期一 16 点有空。

一行的示例是:

|alex1|1|1|0|0|0|0|1|0|0|0|0|0|1|1|1|1|

这意味着用户alex1在周一、周二和周日的 17、18、19 和 20 点有空。

表中可以有多个用户,某些用户可以有多次。例如,用户 alex1 可以位于具有不同保存时间的更多行中。 (示例:一行表示他在周一和周五 15 点之后有空,而另一行表示他在周六 14 点、17 点和 20 点有空)

示例:

gordon | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
gordon | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 

第一行表示:用户 gordon 在周一和周二 12 点有空 第二行表示:用户 gordon 在周三 13 点有空

问题是:

如何进行查询并通过表给出结果:

  Day    | t12 | t13 | t14 | t15 | t16 | t17 | t18 | t19 | t20 |
________________________________________________________________
Monday      5     4     8     8     8     4     0     0     4
Tuesday     2     2     2     2     2     1     0     0     2
Wednesday   10    10    10    2     8     10    8     7     7
Thursday    5     4     8     8     8     4     0     1     4
Friday      5     4     3     7     8     4     9     0     4
Saturday    8     9     8     3     9     4     3     0     4
Sunday      1     4     8     8     1     4     0     9     3

这意味着:周一 14 点有 8 个用户空闲,或者周五 20 点有 4 个用户空闲。

最佳答案

更好的设计的一个例子是有一个如下表:

可用性

user day time
   1   1   16

这可能不是最好的解决方案,但它对您当前的设置来说是一个巨大的改进。

关于mysql - 如何计算列中的值并将每个列名称及其结果保存在一行中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56101085/

相关文章:

sql - Oracle SQL 从有序数据集中获取第一条和最后一条记录

sql - 比较值何时可以为 NULL 或文本

database - PL/SQL - NOCOPY 参数以提高性能

php - laravel 存储过程错误

php - 如何使用mysql从多个表中检索数据

sql - PostgreSQL ORDER BY 问题 - 自然排序

c# - 增量更新应用程序数据的最佳方法

database - Codeigniter join 重复返回值

mysql - 为什么MySQL选择范围扫描(慢)与索引扫描(更快)

php - 坚持连接 PHP 和 MySQL