【问题标题】:mysql add columns and write the result in the same tablemysql添加列并将结果写入同一个表中
【发布时间】:2020-01-31 05:00:13
【问题描述】:

我在 mysql 19BE1attendance 中有一个学生考勤表。列是数字、名称、总计、Week_2、Week_1

Week_X 为 1 或 0

当然,随着学期的进行,周数会增加。

列总计应该是 Week_X 值的总和。

这就是我想要的,所有的值都很好地添加到第三列总计中:

选择 Week_2、Week_1、(Week_1 + Week_2)作为 19BE1 出席的总数;

编辑:我制作了可以将 .csv 导入表格的 php。这就是出勤值进入出勤表的方式。

现在我有总数了。假设我有另一个表总计 3 列数字名称总计

如何在列总计中获得每个学生的总计?

或者,当学生希望查看他或她的分数时,动态添加出勤值并将其输出到带有 foreach() 的网页中。

我已经可以使用 php 输出虚构的分数值了。

(编号为学号,是每个学生的唯一标识)

【问题讨论】:

  • 关系数据库中的表不是电子表格。它们代表关系。你用错了。
  • 我明白了,这是我的问题。我只是从mysql开始
  • 大概不可能有 week_3 或 week_0?
  • 总共有 18 周。我只是在做实验。我厌倦了这个:SELECT number, Week_2, Week_1, (Week_2 + Week_1) AS total FROM 19BE1attendance WHERE number = '1925010101';这让我得到了我想要的。只需要把它放到php中!

标签: mysql


【解决方案1】:

你真的应该考虑把你的桌子设计改成这样:

name | week_no | total

week_no 列也可以是日期或时间戳,您可以从中轻松提取周数。使用这种设计,如果您想要每个名称的总数,您只需要使用:

SELECT name, SUM(total) AS total
FROM yourTable
GROUP BY name;

您当前设计的问题在于,将几周添加为新列根本无法很好地扩展。此外,您可能应该避免将总计存储为单独的列,因为它是派生数据。如果基础总计随时间变化,您建议的总计列可能会过时,需要经常更新。

【讨论】:

  • 我需要里面的号码,学号。它是唯一标识符。后来,我得让php来做这件事,但首先我想知道如何在bash中做到这一点。
  • 然后编辑您的问题并向我们展示实际问题。鉴于您提供给我们的信息,我已尽我所能回答。
【解决方案2】:

恐怕您的问题没有简单的解决方案,因为表格的布局设计得很差。如果可以的话,我强烈建议重构这张表。更合适的布局是这样的:

CREATE TABLE attendance (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Entry identifier',
 name VARCHAR NOT NULL COMMENT 'The persons name',
 year INT UNSIGNED NOT NULL COMMENT 'Year of week in which attendance is noted',
 week     INT UNSIGNED NOT NULL COMMENT 'Weeknumber for which attendance is noted',
 is_present TINYINT UNSIGNED NOT NULL COMMENT 'Whether person was present (1) or not (0)'
) ENGINE Innodb;

使用此布局,您可以创建一个非常简单的 SELECT 语句,获取每个人的总体出勤统计数据。

【讨论】:

  • 实际上,我需要在学期结束时将每周的价值观呈现给我的老板。当然,无论如何我都有它们,它们在我的电子表格中。我会将它们上传为 .csv。我正在做的是一个 php 驱动的网页,它可以获取每个学生的出勤率、考试成绩和总分,并将它们显示在网页上。学号是唯一的标识符。学生输入他或她的号码,可以一目了然地看到他或她的所有数据。
  • 所以,现在,我需要从 SELECT Week_2, Week_1, (Week_1 + Week_2) 中获取总计 FROM 19BE1attendance;并将其放入我的 php 输出中。
  • 也许我可以制作另一个表格,总计,包含数字、姓名和总计,然后让每个学生的总计等于总计?这会是一条路吗?
  • 我认为这个表格布局可以满足您的需求。每周“出勤”是一条记录,您可以在 is_present 列上进行 SUM 并按数字进行分组,这将为您提供每个学生的“出勤”总数 可选添加 WHERE 以获得特定人的总数.
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 2011-11-06
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
相关资源
最近更新 更多