MySQL INSERT/SELECT 子查询语法

标签 mysql select insert subquery

我就是想不通这个语法的正确语法。下面是我的查询,在我认为我希望它执行的位置对我的子查询进行了简单的英语解释。

mysql_query("INSERT INTO donations(
            tid,
            email,
            amount,
            ogrequest,
            total
            )
            VALUES (
                '".esc($p->ipn_data['txn_id'])."',
                '".esc($p->ipn_data['pay_email'])."',
                ".(float)$amount.",
                '".esc(http_build_query($_POST))."',

            Here I want to select the row with the max date, get the value of the "total" column in that row, and add $amount to that value to form the new "total" for my newly inserted row.

            )");

谁能帮帮兄弟?

最佳答案

真正的答案是您不应该将总计存储在此表的列中。这实际上不是任何有用的信息。您应该存储的是当前日期,然后通过 SUM 和 GROUP BY 计算总数。如果它是您需要经常访问的内容,则将该值缓存在别处。

为什么在最后一行之前的任何行中都需要总数?这只是浪费的数据,可以很容易地从表中重新生成。

为什么要在这一列中存储总数。这些数据为您的模式增加了什么值(value)?这里需要注意的重要一点是,总数不是单个交易的属性。总数是单个交易的聚合子集的属性。

此外 - 确保在 MySQL 中使用 DECIMAL 而不是 FLOAT 作为货币列类型,如果不是的话。 FLOAT 值可能会导致舍入误差,具体取决于您的操作,当涉及金钱时,没有理由冒险这样做。

关于MySQL INSERT/SELECT 子查询语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877771/

相关文章:

php - 一种编写 INSERT INTO 表 VALUES (value1, value2, ...valueN) 的简单方法

mysql - 更改mysql日期/时间/日期时间默认输出格式

java - 将结果集存储在 arraylist Java 中

php - 无法在 view.Laravel 中获取值

sql - 从 Oracle 的 Select (not Distinct) 中的第一列中删除重复项

android - 如何将两个查询合并为一个?

mysql - MariaDB 不在过程中执行插入

mysql - 查询Mysql数据库

php - 从 MySQL 数据库中选择 ISO 8601 时间戳

mysql - foreach 循环将多行插入数据库