使我的代码异步,因此它不会永远加载

时间:2016-02-27 17:29:24

标签: php mysql asynchronous synchronization

我想在加载页面的时候,它会从mysql每秒开始获得5行(mysql查询)(如果可能的话,还会有很酷的淡入效果)。

我使用此代码显示所有已婚玩家及其合作伙伴的列表,我的数据库有很多合作伙伴,我使用API​​将其UUID转换为用户名,这需要很长时间负载&转换,所以我需要把它变成异步。

我还在学习PHP顺便说一句!

最后,这里是代码:

$mysql = mysql_connect('localhost', 'root', '');
mysql_select_db("marry",$mysql);
$result = mysql_query("SELECT player1,player2 FROM marriage_marriages");
$rows   = mysql_num_rows($result);


if ($rows) {
echo '<div class="col-lg-12"><table class="table"> <h2>Married Players</h2><thead><tr><th>User 1</th><th>User 2</th></tr></thead><tbody>';

while ($row = mysql_fetch_assoc($result)) {
echo '<tr>';


echo '<td>'. file_get_contents("http://api.mcusername.net/uuidtoplayer/".str_replace('-', '', '' . $row["player1"] . '')) .'</td>'; #user1


echo '<td>'. file_get_contents("http://api.mcusername.net/uuidtoplayer/".str_replace('-', '', '' . $row["player2"] . '')) .'</td>'; #user1
echo '</tr>';
}
echo '</tbody></table></div>';

1 个答案:

答案 0 :(得分:2)

如果您在将数据库插入数据库时​​将其存储在数据库中,则可以考虑节省大量时间,而不是试图使其异步。

我建议你创建一个播放器表,它将 uuid 作为键, name 作为第二列。

每次将新玩家插入该表时,请按照现有的方式查找给定的 uuid 值:

$name = file_get_contents("http://api.mcusername.net/uuidtoplayer/".str_replace('-', '', '' . $uuid . ''));

然后使用这两个值完成插入(我假设mysqli函数):

$stmt = $mysqli->prepare("INSERT INTO players (uuid, name) VALUES (?, ?)");
$stmt->exec($uuid, $name);

如果您为所有玩家执行此操作,那么您对婚姻的查询将是:

SELECT      a.name, b.name
FROM        marriages m
INNER JOIN  players a
         ON m.player1 = a.uuid
INNER JOIN  players b
         ON m.player2 = b.uuid

现在,在构建表时,您不需要调用那些耗时的名称查找。

这将带来巨大的性能提升。