gpt4 book ai didi

php - 如果不为空,我怎样才能插入到表中并覆盖?

转载 作者:行者123 更新时间:2023-11-30 22:04:13 24 4
gpt4 key购买 nike

我想知道如何编写这段代码:如果不是空的插入到表中,否则覆盖行:

$affectedRows = $pdo->exec( 
"insert into table_1 (name, money, month, year)
select name, count(*), MONTH(STR_TO_DATE(data, '%d/%m/%Y')),
YEAR(STR_TO_DATE(data, '%d/%m/%Y'))
from table_2
group by name");

谢谢

最佳答案

使用以下查询:

INSERT INTO table_1 (name, money, month, year)
SELECT t.name, t.money, t.month, t.year
FROM
(
SELECT name,
COUNT(*) AS money
MAX(MONTH(STR_TO_DATE(data, '%d/%m/%Y'))) AS month,
MAX(YEAR(STR_TO_DATE(data, '%d/%m/%Y'))) AS year
FROM table_2
GROUP BY name
) t
ON DUPLICATE KEY UPDATE name=t.name, money=t.money, month=t.month, year=t.year

请注意,我用聚合函数 MAX() 封装了您对 MONTH()YEAR() 的调用,因为它是使用 GROUP BY 时选择非聚合列是不正确的。如果您向我们展示 table_2 的实际数据,那么也许这可以改进。

更新:

请注意,上面的结果集用于插入的子查询永远不会产生重复记录,因为每组只能有一条记录。因此,要测试这个答案,您必须已经在 table_1 中有一些数据,这些数据将被子查询复制。

关于php - 如果不为空,我怎样才能插入到表中并覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com