我在一个数据库中有两个表。我正在查询第一个表限制 10,然后循环结果。在 while 循环内,我使用第一个查询中的数据作为参数再次执行另一个查询。以下是该脚本的示例:
<?php
$con = mysql_connect(host,username,password);
mysql_select_db(game_server);
//My first query
$q1 = mysql_query('SELECT * FROM game_characters ORDER BY score DESC LIMIT 10');
while($character = mysql_fetch_object($q1)){
//My second query
$q2 = mysql_query('SELECT * FROM game_board WHERE id="'.$character->id.'"');
$player = mysql_fetch_object($q2);
}
?>
因此,如果我的结果有 100 行,那么第二个查询将执行 100 次。我知道这不好。我怎样才能让它变得更好。有没有一种方法可以在一个查询中完成所有操作?如果 while 循环内有另一个查询,其中使用第二个查询的数据作为参数,该怎么办?
P.S.:我正在为一个在线游戏做一个排名系统。
如果使用 JOIN,则可以在一个查询中完成此操作。
SELECT * FROM game_board AS b
LEFT JOIN game_characters AS c ON b.id = c.id
ORDER BY c.score DESC
LIMIT 10
您还可以使用嵌套查询
SELECT * FROM game_board AS b WHERE
id IN (SELECT id FROM game_characters AS c ORDER BY score DESC LIMIT 10)
您还可以将所有 game_character.id 放入一个数组中,并使用
$sql = "SELECT * FROM game_board AS b WHERE b.id IN (" . implode(', ', $game_character_ids) . ")";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)