mysql - 选择、求和、插入(如果存在)使用 MySql 进行更新
问题描述
我试图在删除 selecttime
和id_use
fromtab1
和 insert into之前执行触发器,tab2
但是当 intab1
有几个相同时id_use
,它将求和时间然后插入到tab2
,此时我知道如何做到这一点,这就是我的查询
INSERT INTO tab2 (id_user, time) SELECT id_use, SEC_TO_TIME( SUM( TIME_TO_SEC( time ) ) ) AS suma FROM tab1 GROUP BY id_use HAVING COUNT(*) > 0
但现在是棘手的部分(对我来说),如果tab2
已经存在相同id_user
的值,我必须将已经存在的值tab1
与新值相加,如果没有具有此 ID 的用户只需插入。我试过了,ON DUPLICATE KEY UPDATE
但没有成功 对不起,我的英语很差,感谢您的帮助。
解决方案
我应该问为什么你不能为此使用像 php 这样的后端语言?
然后只需进行如下查询:Select id_use FROM tab1 WHERE id_use='xy';
然后使用mysql_num_rows()
Then:
if(num_rows > 0){
//update it
}else{
//insert it
}
但如果你愿意,你可以试试这个:INSERT INTO tab2 (id_user, time) SELECT id_use, SEC_TO_TIME( SUM( TIME_TO_SEC( time ) ) ) AS suma FROM tab1 GROUP BY id_use HAVING COUNT(*) > 0 ON DUPLICATE KEY UPDATE time=(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( time) ) ) FROM tab1)
推荐阅读
- python - 带有来自另一个模块的对象的 init 方法
- java - 将base64字符串转换为十进制时出错
- c++ - 用右值引用和可变参数模板替换 C++ std::bind 到 lambda
- python - 如何将字符串替换为日志记录参数?
- c++ - 在为 std 模板函数创建仿函数对象时减少样板文件
- ada - 在记录/指针上使用 .all 时如何防止访问检查失败?
- html - Boostrap 验证在 Modal 上不起作用?
- machine-learning - 在比较不同文档对的余弦相似度时是否需要调整长度?
- java - 2D GameEngine Gameloop - 渲染插值/部分刻度
- php - 哈希密码与以前不同然后无法登录