我目前正在尝试从我的表中获取数据(在超过 300 次击杀的表中按武器列出的mostKills)。最初我做了一个正常的查询
$q = $mysql->query("SELECT * FROM `kills`") or die($mysql->error);
但是当我尝试
$query2 = $mysql->query("SELECT `killerID`, COUNT(`killerID`) AS tot_kills FROM `kills` WHERE `killText` LIKE '%$gun%' GROUP BY `killerID` ORDER BY `tot_kills` DESC;") or die($mysql->error);
$kData = $query2->fetch_assoc();
$query3 = $mysql->query("SELECT `Username` FROM `players` WHERE `ID` = '" . $kData['killerID'] . "'") or die($mysql->error);
$uData = $query3->fetch_assoc();
$array[$gun]['Kills']++;
$array[$gun]['Gun'] = $gun;
$array[$gun]['BestKiller'] = $uData['Username'];
$array[$gun]['killAmount'] = $kData['tot_kills'];
function sortByKills($a, $b) {
return $b['Kills'] - $a['Kills'];
}
usort($array, 'sortByKills');
foreach($array as $i => $value)
{
// table here
}
我必须在 while 循环中执行此操作,这导致大约有 600 个查询,这显然是 Not Acceptable 。您对如何优化它,甚至将其变成单个查询有什么建议吗?
我听说 JOIN 对此很有好处,但我对此了解不多,想知道你们是否可以帮助我
最佳答案
试试这个...
我添加了一个内部联接
,并在您的 select 子句中添加了一个用户名
。 MIN()
只是在 select
中包含 username
列的一种方法,只要您每个 Killerid 只有 1 个用户名
SELECT `killerID`
, COUNT(`killerID`) AS tot_kills
, MIN(`Username`) AS username
FROM `kills`
INNER JOIN `players`
ON `players`.`id` = `kills`.`killerid`
WHERE `killText` LIKE '%$gun%'
GROUP BY `killerID`
ORDER BY `tot_kills` DESC
关于php - 如何将循环中的这两个查询转换为单个 JOINed 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22866990/