0

私はこのクエリを持っています

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id
WHERE weapon_stats.weapon = 26
ORDER BY weapon_stats.kills DESC
LIMIT 1;

問題は、結果が 1 から 30 まで変化する必要があることです。それは奇妙です..

1 回のクエリですべての結果を取得することは可能ですか?

すべての武器で最も多くのキルを持つ各ユーザーを獲得したい

武器1

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id
WHERE weapon_stats.weapon = 01
ORDER BY weapon_stats.kills DESC
LIMIT 1;

武器 2

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id
WHERE weapon_stats.weapon = 02
ORDER BY weapon_stats.kills DESC
LIMIT 1;

前もって感謝します!

4

4 に答える 4

1
WHERE weapon_stats.weapon BETWEEN 1 AND 30
于 2013-05-10T20:42:24.810 に答える
1
select U.name, W.weapon, W.kills
FROM users U
INNER JOIN weapons W on W.zp_id = U.id
INNER JOIN 
  (SELECT WW.weapon, MAX(WW.kills) AS kills 
    FROM weapons WW 
    WHERE WW.weapon BETWEEN 1 AND 30
    GROUP BY WW.weapon) K
  ON W.kills = K.kills AND W.weapon = K.weapon

最適化により高速化できると確信していますが、これは最終的に機能します

jsfiddle リンク

于 2013-05-10T20:41:16.993 に答える
0

あなたが探しているものを誤解していない限り、次のことはできませんか?

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id
WHERE weapon_stats.weapon BETWEEN 1 and 30
ORDER BY weapon_stats.kills DESC
LIMIT 1;
于 2013-05-10T20:43:27.123 に答える
0

「どこを 1 から 30 に変更する」というのが何を意味するのかわかりませんが、以下を参照してください。

[..] WHERE wearpon_stats.weapon 1 と 30 の間;

詳細はこちら: https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

于 2013-05-10T20:42:47.713 に答える