微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如果存在则更新,如果MySQL中不存在则插入行

在这里问了类似的问题……

three tables with Inner Join

但我无法得到足够的答案来解决我的问题,所以我不得不再次提问……

我有下表……

**

anyone who want to play on the data please test it here 07001

**

Table1
IDA    colB    colC    
111       a       w    
222       b       w    
333       c       s        
444       b       g    



Table2
IDB    colB    colC    
11       w       f    
12      w       r    
13      s       g    



Table3
IDA     IDB       
111     11         
222     12           
333     13       
444     14

下面的代码将从table1复制或插入到表中没有问题,但是有错误的table2 IDB(因为table2 IDB值应该从内部连接到table3)

INSERT INTO table2 SELECT * FROM table1 WHERE IDA = 111

但是将所有从table1复制到table2,这是错误的……

所以,我所做的是……以下的内部联系……但是没有工作……

INSERT INTO table2
(SELECT * FROM table1 b 
LEFT JOIN table3 c ON c.IDA = b.IDA  
LEFT JOIN table2 a ON a.IDB = c.IDB)
WHERE IDB = 111

这也不起作用….

但是,我需要的是……我想从table1复制到table连接到table3,如果行可用则更新,如果不插入….

对不起要问两次,但我是亲戚从你们那里得到一些想法……

请帮忙……先谢谢…

可能正在使用PHP,如果可能的话……

解决方法:

尝试使用ON DUPLICATE KEY

$sql = "INSERT INTO `table2` (Col2, Col3) 
VALUES ('val1', 'val2')
ON DUPLICATE KEY UPDATE
Col2='val1', Col3='val2'";

编辑:

INSERT INTO table2 (ColB , ColC)
(SELECT ColB.b,ColC.b FROM table1 b 
    LEFT JOIN table3 c ON c.IDA = b.IDA  
    LEFT JOIN table2 a ON a.IDB = c.IDB
 WHERE IDB = 111
)
ON DUPLICATE KEY UPDATE
ColB = ColB.b   
ColC = ColC.b

并尝试避免MysqL_ *语句由于整个ext / MysqL PHP扩展,它提供了所有以前缀MysqL_ *命名的函数,从PHP v5.5.0开始正式弃用,将来会被删除.

还有另外两个MysqL扩展你可以更好地使用:MysqLi和PDO_MysqL,其中任何一个都可以用来代替ext / MysqL.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐