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