【问题标题】:How to insert data into new table from other table and make sum of two column如何将数据从其他表插入新表并计算两列的总和
【发布时间】:2017-09-07 02:20:19
【问题描述】:

在用户向其帐户投放资金后,我正在使用以下 mysql 查询将数据从 oldtable 插入到 newtable。如果用户将一些钱存入他的帐户,我想输入 accbal 列的值作为信用列值和 accbal(用户旧帐户余额)的总和。即我想在调整借方贷方金额后添加具有用户帐户结果余额的 mysql 行。请告诉我如何使用 mysql 和 php。

$sql2="INSERT INTO newtable (emailadd, credit, debit, accbal, txtime, txnid) SELECT buyeremailaddr, 'balcredit', '0', QUESTION, pptxtime, pptxid FROM oldtable WHERE paymenthash='$item_no' AND paid='1'"; 
$result2=mysql_query($sql2);

【问题讨论】:

  • 你想加在一起的两个值在哪里?如果它们都在 oldtable 中,只需在 select 语句中添加它们 'accbal + credit'。否则您可能需要在其中嵌套另一个查询
  • 旧表没有 accbal 值。它仅包含在新表中
  • 警告:如果您只是学习 PHP,请不要使用mysql_query 接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。您的用户数据不是properly escaped,有SQL injection bugs,可以被利用。
  • 您必须将其分成 2 个查询

标签: php mysql


【解决方案1】:

这可能比您需要的更复杂,但是当您尝试将相关记录中的值与最近日期链接时,它会变得很棘手:

INSERT INTO newtable (
    emailadd
    , credit
    , debit
    , accbal
    , txtime
    , txnid
) SELECT buyeremailaddr
    , 'balcredit'
    , '0'
    , credit + accbal
    , pptxtime
    , pptxid 
FROM oldtable
    LEFT JOIN (
        SELECT emailadd,accbal FROM newtable JOIN (
            SELECT emailadd
                ,MAX(txtime) AS maxdate 
            FROM newtable GROUP BY emailadd
        ) AS mt ON mt.maxdate = newtable.txtime 
            AND mt.emailadd = newtable.emailadd GROUP BY emailadd
    ) AS nt ON oldtable.buyeremailaddr = nt.emailadd 
WHERE paymenthash='$item_no' 
    AND paid='1'

本质上,您加入了按电子邮件分组的新表,该新表又加入了按电子邮件分组的自身,以便将 txtime 与最大 txtime 进行比较以获得最新的 accbal 值。警告:这不适用于非常大的表。更好地创建视图,甚至更好地重新评估您现有的数据结构

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多