【问题标题】:How to sum the value of all columns in one row except the ID如何对除ID之外的一行中所有列的值求和
【发布时间】:2013-01-30 20:42:08
【问题描述】:

我需要对除第一列之外的一行的总数求和。
也有类似的:

选择总和(col2 + col3 + col4 +colN) 从数字 WHERE user_name = 'person';

我的表格将不断添加列。所以我希望它也能自动获取新列的总和,而不需要将其硬编码到查询中?

user_name  | Col | col2 | Col3 | Col4 + other columns.

person1    |  2  |  3   | 76   | 56  etc.    ---------> sum of row

person2    |  6  |  72  | 200  | 13  etc.    ---------> sum of row

提前感谢您的帮助!

【问题讨论】:

  • 如果您需要这样做,那么建议您以适当的方式规范化您的数据库
  • 这将有助于更多地了解您在 Col1、Col2 ... ColN 中存储的信息类型。如果您能够更新您的问题或在此处添加更多详细信息的评论,那么我会看看是否可以通过更多示例更新我的答案。

标签: php mysql sum row


【解决方案1】:

不想“回避”这个问题,但看起来你可以使用不同的数据结构。

您应该考虑创建一个包含 iduser_name 列的“用户”表,以及一个新表(例如 properties),在当前表中的每个其他列 (Col1Col2 ...ColN)。然后,新表将有一个 user_name 列,以将其链接到 users 表。

这样你就可以做类似的事情:

SELECT SUM(property_column) FROM properties WHERE user_name = <RequiredUserName>

我还建议按 ID 选择用户(即,使用带有 user_id 列而不是 user_name 列的 properties 表),除非您确信 user_name 永远不会改变(即使那样。 ..)。

【讨论】:

  • 好的,谢谢我已经完成了。现在我正在尝试将数据插入特定字段。 INSERT INTO tablename (colNumberX) VALUES 500 WHERE (ID Coulmn) = idnumber ----->类似这样的东西。有什么想法吗?
  • 在不了解更多上下文的情况下很难推荐。如果您的新属性表包含 user_name、property_name 和 value 列,那么您可以使用 INSERT INTO properties (user_name, property_name, value) VALUES ("billy", "high score", 500)。您可能还希望将 user_name 和 property_name 作为主键,以便您可以在查询末尾添加“ON DUPLICATE KEY UPDATE”。如果该用户/属性组合已经存在值,这将替换值。可能值得用更多信息更新您的原始问题,或者将此部分记录为新问题。
【解决方案2】:

也许最简单的解决方案是在 PHP 中完成:

$res = mysql_query("select * from numbers where user = ...");
while ($row = mysql_fetch_assoc($res)) {
    $row['Id'] = 0; // don't want to sum the Id
    $sum = array_sum($row); // this is the required sum
    ....
}

【讨论】:

  • 你的意思是 $row['user_name'] = 0; // 不想对 user_name 求和?我知道Id会更好。只需使用 OP 的现有列名...
【解决方案3】:

如上所述,您最好重新访问您的数据库结构, 如果你不能和 如果您想在 PHP 中执行此操作,您可以取回结果集,然后循环遍历字段并排除您不想要的字段,然后添加其他所有内容,假设它是正确的类型,使用 mysql_field_type 查找那些具体类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多