0
<?
include 'database.php';

$user1 = mysql_query("SELECT id,username FROM `users` ORDER BY `id` ASC");


while($user = mysql_fetch_object($user1)) {
mysql_query("UPDATE `pokemon` SET `user`=$user->id WHERE `owner`='$user->username'");
}

?>

基本上,我的游戏中有超过 300,000 的用户,并且有数百万的“Pokemon”。

我正在考虑使用整数作为外键而不是字符串,因此我创建了这个小脚本来为我做这件事。

不幸的是,它似乎在过去一个小时内只更新了 1000 个用户,因此我需要 300 个小时才能完成整个事情。有没有办法让这个脚本更有效率?

user是新的唯一标识符,而owner是旧的唯一标识符(外键)。

我的方法是否有需要不到 3-4 小时时间的替代解决方案?我确信一定有一些不错的小 SQL 查询,我可以通过 phpMyAdmin 执行而不是使用这段代码。

感谢所有的帮助,真的很感激,我一定会尽可能回报。

编辑:感谢您教我这项新技术,我会尝试并更新我的线程。

4

2 回答 2

2

我认为UPDATE带有 an 的查询INNER JOIN会比循环更快

UPDATE `pokemon` a 
INNER JOIN `users` b
ON a.`owner` = b.`username`
SET a.`user`= b.`id`
于 2013-06-09T11:47:17.960 回答
1

您可以加入表,然后在单个 sql 查询中进行更新:

UPDATE pokemon
LEFT JOIN users
ON pokemon.owner = users.username
SET pokemon.user = users.id
于 2013-06-09T11:46:24.390 回答