diff --git a/wp-admin/upgrade-functions.php b/wp-admin/upgrade-functions.php index 8b19d00d09..952654b9ce 100644 --- a/wp-admin/upgrade-functions.php +++ b/wp-admin/upgrade-functions.php @@ -197,6 +197,16 @@ function upgrade_130() { $wpdb->query("UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); $wpdb->query("UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); + // Some versions have multiple duplicate option_name rows with the same values + $options = $wpdb->get_results("SELECT option_name, COUNT(option_name) AS dupes FROM `$wpdb->options` GROUP BY option_name"); + foreach ( $options as $option ) { + if ( 1 != $option->dupes ) { // Could this be done in the query? + $limit = $option->dupes - 1; + $dupe_ids = $wpdb->get_col("SELECT option_id FROM $wpdb->options WHERE option_name = '$option->option_name' LIMIT $limit"); + $dupe_ids = join($dupe_ids, ','); + $wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)"); + } + } } // The functions we use to actually do stuff diff --git a/wp-admin/upgrade-schema.php b/wp-admin/upgrade-schema.php index 151351a471..a3e3c80887 100644 --- a/wp-admin/upgrade-schema.php +++ b/wp-admin/upgrade-schema.php @@ -78,7 +78,8 @@ CREATE TABLE $wpdb->options ( option_description tinytext NOT NULL, option_admin_level int(11) NOT NULL default '1', autoload enum('yes','no') NOT NULL default 'yes', - PRIMARY KEY (option_id,blog_id,option_name) + PRIMARY KEY (option_id,blog_id,option_name), + KEY option_name (option_name) ); CREATE TABLE $wpdb->post2cat ( rel_id int(11) NOT NULL auto_increment,