【发布时间】:2013-04-14 05:53:13
【问题描述】:
我目前有以下查询(以及一些周围的 vB 代码)。我希望我可以将其精简为单个 SELECT 语句,而不是在每个页面上运行 10 个以上来获取个人姓名。
$results = $db->query_read_slave("
SELECT user.id AS steam, user.skills AS level
FROM wcsp.wcgousers AS user
WHERE race = '_wcs_'
ORDER BY ABS(user.skills) DESC LIMIT 10
");
$rank = 1;
while ($user = $db->fetch_array($results)) {
$result = $db->query_first("
SELECT old.name AS name
FROM wcsp.warn_oldnames AS old
WHERE id = '$user[steam]'
ORDER BY lasttime
DESC LIMIT 1
");
$listing[] = array("id" => $user['steam'], "level" => $user['level'], "name" => $result['name'], "rank" => $rank);
$rank += 1;
}
我尝试过 LEFT JOIN,但遇到的问题是我需要在 LEFT JOIN 中添加一个子查询,类似于:
SELECT user.id AS steam, user.skills AS level, names.name AS name
FROM wcsp.wcgousers AS users
LEFT JOIN
(
SELECT names.name
FROM wcsp.warn_oldnames AS names
WHERE id = wcsp.wcgousers.id
ORDER BY lasttime DESC LIMIT 1
) AS names
ON names.id = users.id
WHERE users.race = '_wcs_'
由于子查询中的数据库检查不同,这将不起作用。
【问题讨论】:
标签: mysql sql join greatest-n-per-group