如何撤消意外重复的用户元数据关键字值?

时间:2013-04-25 作者:emeraldjava

我发现我的一些用户有重复的元数据键值(我唯一的错误是因为我直接将数据插入了wp\\u usermeta表!)。例如,此查询

SELECT * FROM  `wp_usermeta` WHERE  `user_id` =2327x LIMIT 0 , 30
返回两行

meta_id - user_id - meta_key - meta_value
178208 - 23270 - bhaa_runner_status - D
187959 - 23270 - bhaa_runner_status - D
我有很多用户都受此影响,我想知道是否可以运行SQL更新或删除来发现此情况并删除较大的“meta\\u id”行?

2 个回复
SO网友:tfrommen

这应该满足您的需要:

global $wpdb;
$wpdb->query("
    DELETE FROM $wpdb->usermeta
    WHERE meta_id NOT IN (
        SELECT MIN(meta_id)
        FROM $wpdb->usermeta
        GROUP BY user_id, meta_key, meta_value
    )"
);
也许你应该先back up your table, 虽然

SO网友:AndyT

我发现以下方面有所帮助:

        $sql = "SELECT MAX(umeta_id)
            FROM wp_usermeta
            GROUP BY user_id, meta_key, meta_value
            HAVING COUNT(user_id) > 1";

        $um = $wpdb->get_results( $sql, ARRAY_A );

        foreach ($um as $user) {
            $sql = "DELETE FROM wp_usermeta WHERE umeta_id = " . $user[\'umeta_id\'];
            $wpdb->query($sql); 
        }
count子句有助于确保获得重复的内容。最大值为您提供更大的“meta\\u id”。

结束

相关推荐