私は現在、次のクエリ (およびいくつかの周囲の vB コード) を持っています。個人の名前を取得するために各ページでさらに 10 個の SELECT ステートメントを実行するのではなく、これを 1 つの SELECT ステートメントにスリム化できることを望んでいました。
$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_'
サブクエリ内のデータベースチェックが異なるため、これは機能しません。