2011-08-02 60 views
0

当更新一个有4个表的数据库时,如果一个特定的表没有得到正在更新的数据,那么我怎样才能把这个表插入到那个表中?如何在更新时插入数据?

我的数据库是基于搜索引擎优化,所以插入网站信息到所有4个表。这些表由域名索引。所以如果四个表得到更新的域名,那么它将更新所有的表,否则它不会。但我想将该域和信息添加到没有相同信息的表中。

现在我用正常的更新查询

mysql_query("UPDATE LOW_PRIORITY dscrpn SET descr='$descr',title='$title' WHERE web='".mysql_real_escape_string($urweb)."'"); 
+2

考虑使用PDO(http://net.tutsplus.com/tutorials/php /为什么你应该使用phps-pdo-for-database-access /)并且重新格式化/改写你的问题 – Calum

回答

1

你不能(据我所知)写一个单独的语句,将更新现有行或插入一个新的,如果它不不存在。

您可以做的是发送更新,然后检查受更新影响的行数(mysql_affected_rows);如果它有零行影响,然后做一个插入。你可以在MySQL中做到这一切,但我可​​能只是在PHP代码中做到这一点。

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 
+1

这可以起作用,所以它比我的更好的回答(我已经注册了它)。请注意,这不是标准的SQL。 –

相关问题