WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入
Posted
技术标签:
【中文标题】WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入【英文标题】:WordPress and SQL - Update and Insert from another table if column value doesn't exist 【发布时间】:2015-05-02 00:02:21 【问题描述】:为我的 wordpress 网站使用了一些 mysql。都在 1 DB 以内。
我正在尝试从wp_2_options
(多站点)更新wp_options
表。
它们都有 option_name
(unique_key) 和 option_value
列
如果option_name
已经存在于wp_2_options
表中,则需要更新wp_options
表中的option_value
如果option_name
不存在,则插入来自wp_2_options
的行。
那么我如何UPDATE
和`INSERT 使用 UNIQUE KEY 值而不是 PRIMARY KEY
我该怎么做?
两者的结构相同
wp_options (
option_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
option_name varchar(64) NOT NULL DEFAULT '',
option_value longtext NOT NULL,
autoload varchar(20) NOT NULL DEFAULT 'yes',
PRIMARY KEY (option_id),
UNIQUE KEY option_name (option_name)
) ENGINE=InnoDB AUTO_INCREMENT=1402 DEFAULT CHARSET=utf8;
提前致谢
更新:
最终使用此 INSERT 然后 UPDATE。这对我有用。 现在将通过 php 使用它。
-- Adding completely new rows from wp_2_options into wp_options
INSERT IGNORE INTO wp_options
SELECT *
FROM wp_2_options
WHERE option_name NOT IN (SELECT option_name FROM wp_options);
-- Updating the option_name field in wp_options, if that got changed in wp_2_options
UPDATE wp_options JOIN wp_2_options
ON wp_options.option_name = wp_2_options.option_name
SET wp_options.option_value = wp_2_options.option_value;
【问题讨论】:
【参考方案1】:您无需执行任何操作,索引将为您完成工作。
只需执行 INSERT,然后执行 UPDATE。
如果存在,则 INSERT 将失败,UPDATE 将执行更新。
如果不存在,INSERT 会将其放在那里,而 UPDATE 不会影响任何行。
如果我理解正确, 像这样:
$sql = "SELECT `option_value`,`option_name` FROM `wp_options2` WHERE 1";
$result = mysqli_query($link, $sql);
while($row = mysqli_fetch_array($result, MYSQLI_NUM))
$sql = "INSERT INTO `wp_options`(`option_value`,`option_name`) VALUES( '$row[0]','$row[1]')";
mysqli_query($link, $sql);
$sql = "UPDATE `wp_options` SET `option_value` = '$row[0]' WHERE `option_name` = '$row[1]";
mysqli_query($link, $sql);
如果您需要更温暖的模糊感,请使用一些错误检测:
$sql = "SELECT `option_value`,`option_name` FROM `wp_options2` WHERE 1";
$result = mysqli_query($link, $sql);
while($row = mysqli_fetch_array($result, MYSQLI_NUM))
$sql = "INSERT INTO `wp_options`(`option_value`,`option_name`) VALUES( '$row[0]','$row[1]')";
mysqli_query($link, $sql);
$rows = mysqli_affected_rows($link);
$sql = "UPDATE `wp_options` SET `option_value` = '$row[0]' WHERE `option_name` = '$row[1]";
$rows += mysqli_affected_rows($link);
mysqli_query($link, $sql);
if($rows == 0) $errors[$row[0]] = $row[1];
if(count($errors) > 0)
echo '<p>Houston, we have a problem</p><pre>';
var_export($errors);
echo '</pre>';
【讨论】:
谢谢!很详细的回答!!我添加了我最终在上面使用的代码。就像你说的那样插入然后更新。以上是关于WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入的主要内容,如果未能解决你的问题,请参考以下文章