小程序 API 更新升级用户积分排行榜重复数据问题

最后更新于:2022-04-25

近期积分更新升级后有出现排榜同一个用户有多个排名的情况,主要是更新升级过程中,用户元数据表多次插入数据,造成这种情况大部分是更新升级不完整。如果没有备份数据的,建议先备份再尝试以下操作方式。

1. 查看数据库是否存在表(假设表头为 wp_ ): wp_applets_ucreditstotal 和 wp_applets_ucreditstrack 如果两个表都存在,说明数据更新没有成功能。需要进行手动更新:

(1) .检查 wp_applets_ucreditstotal 是否有 meta_key 字段,如果没有 meta_key 字段,那么执行 MySQL 命令:ALTER TABLE wp_applets_ucreditstotal ADD meta_key VARCHAR(255) DEFAULT 'credits'

(2) .如果 wp_applets_ucreditstotal 有 meta_key 字段,且字段值为:credits,那么执行 MySQL 命令:NSERT INTO wp_usermeta(`user_id`,`meta_key`,`meta_value`) SELECT `user_id`,`meta_key`,`credits` FROM wp_applets_ucreditstotal

(3) 执行完成上面的命令后,查询用户元数据是否有积分记录,执行命令:SELECT * FROM wp_usermeta WHERE meta_key = 'credits'

(4) 如果执行上面的命令后查询有数据,表示已经插入了积分数据,删除 wp_applets_ucreditstotal 数据表,然后,把 wp_applets_ucreditstrack 数据表重命名为 wp_applets_credits 。

(5) 清除相关缓存数据后,如果查看用户积分排行榜出现有同一个用户有多个数据的情况,可以按照下面的方式进行删除相同数据,仅保留一个记录的 MySQL命令。

2. 如果数据库中都不存在以上两个表,但是有一个表:wp_applets_credits 则表明数据库积分表已经更新,而出现同一个用户多个排名的情况,属于在更新升级过程中多次插入用户元数据,操作方法是通过 phpmyadmin 等 MySQL 等数据库管理方式执行以下代码:DELETE a.* FROM `wp_usermeta` AS a INNER JOIN `wp_usermeta` AS b ON a.user_id = b.user_id AND a.meta_key = b.meta_key AND a.meta_value = a.meta_value AND a.umeta_id >b.umeta_id 注意,wp_usermeta 是 WP 默认的用户元数据表,如果你的 WP 修改过表头,那么不一定是 wp_usermeta ,而是 表头_usermeta 。数据更新完成后,先清除一下相关缓存数据。