更新具有4个表的数据库时,如果某个特定表没有得到正在更新的数据,那么如何将该表插入该表?
我的数据库基于SEO,因此将Web信息插入到所有4个表中。这些表由域名索引。因此,如果四个表获得更新的域名,那么它将更新所有表,否则它不会。但我想将该域和信息添加到没有相同信息的表中。
现在我正在使用正常的更新查询
mysql_query("UPDATE LOW_PRIORITY dscrpn SET descr='$descr',title='$title' WHERE web='".mysql_real_escape_string($urweb)."'");
答案 0 :(得分:1)
你不能(据我所知)编写一个单独的语句来更新现有的行,或者如果它不存在则插入一个新的。
您可以做的是发送更新,然后检查受更新影响的行数(mysql_affected_rows);如果受影响的行数为零,则执行插入操作。您可以在MySQL中完成所有操作,但我可能只是在PHP代码中执行此操作。
答案 1 :(得分:1)
请参阅http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
自包含示例(使用PDO):
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);
$stmt = $pdo->prepare('
INSERT INTO
so_dscrpn
(web,descr,title)
VALUES
(?,?,?)
ON DUPLICATE KEY UPDATE
descr=VALUES(descr),
title=VALUES(title)
');
$data = array(
array('uri1', 'desc1', 'title1'),
array('uri2', 'desc2', 'title2'),
array('uri1', 'desc3', 'title3')
);
foreach($data as $row ) {
$stmt->execute($row);
}
foreach( $pdo->query('SELECT * FROM so_dscrpn', PDO::FETCH_ASSOC) as $row ) {
echo join(', ', $row), "\n";
}
function setup($pdo) {
$pdo->exec('
CREATE TEMPORARY TABLE so_dscrpn (
web varchar(48) NOT NULL,
descr varchar(48),
title varchar(48),
unique key(web)
)
');
}
打印
uri1, desc3, title3
uri2, desc2, title2