2012-01-30 21 views
1

私は90%のクエリを持っています。「未知の列a.UserID where句」のエラーを表示しています。 SQLの内部処理は、私がテーブルAを設定していることがわからないため、それが問題になることはわかりませんが、それは私の知識と専門知識を超えて機能します。私はJOINで代替ルートを試しましたが、問題MySQLのサブクエリ/ジョイン

クエリは次のとおりです。だから、基本的に私は何をしようとしている

SELECT 
    a.*, 
    (SELECT AVG(c.PlayerTime) 
    FROM (
    SELECT PlayerTime 
    FROM elite_highscores b 
    WHERE a.UserID = b.UserID 
    ORDER BY PlayerTime ASC LIMIT 10 
    ) c 
) AS avgtime, 
    MIN(PlayerTime) as besttime, 
    MAX(TimeAdded) as time, 
    COUNT(UserID) 
FROM elite_highscores a 
WHERE Publish = 'Yes' 
GROUP BY UserID HAVING COUNT(UserID) >= 10 
ORDER BY avgtime ASC 

も(ログインして10以上のハイスコアを持つユーザーのための)ハイスコアテーブルからいくつかの数字を選択しています平均時間(avgtime)を計算しますが、そのプレイヤーの最後の10点に基づいて計算します。これが私の問題を引き起こしています。他のすべては正常に動作しているようです。

テーブル構造:

ScoreID int(16) 
UserID int(10) 
PlayerScore int(16) 
Publish enum('No', 'Hidden', 'Expired', 'Yes') 
TimeAdded int(16) 
PlayerIP varchar(18) 
Country varchar(2) 
PlayerTime int(10) 
code varchar(50) 
+0

あなたはちょうどあなたがそれを割り当てられた短い名前の代わりに、実際のテーブル名を使用するだけです。 –

+0

あなたの 'a.UserID = b.UserID'サブクエリーは2回ネストされているので、参照として最も外側のスコープIIRCを使用することはできません。 – Naltharial

+0

Andreas、質問の一部を私は置き換えますか? Naltharialはいはいそれが問題だと思ったが、それが入れ子になっていないと構文エラーがスローされる。 – user759542

答えて

1
SELECT 
    a.UserID, 
    last10.avgtime, 
    MIN(a.PlayerTime) AS besttime, 
    MAX(a.TimeAdded) AS time, 
    COUNT(*) 
FROM 
     elite_highscores a 
    JOIN 
     (SELECT b.UserID, 
       AVG(b.PlayerTime) AS avgtime 
     FROM 
       (SELECT DISTINCT UserID 
       FROM elite_highscores 
      ) da 
      JOIN 
       elite_highscores b 
      ON b.UserID = da.UserID 
      AND b.PlayerTime <= 
       (SELECT c.PlayerTime 
        FROM elite_highscores c 
        WHERE c.UserID = da.UserID 
        ORDER BY c.PlayerTime ASC 
        LIMIT 1 OFFSET 9 
       ) 
     GROUP BY b.UserID 
    ) last10 
    ON last10.UserID = a.UserID 
WHERE a.Publish = 'Yes' 
GROUP BY a.UserID 
ORDER BY avgtime ASC 
+0

大変ありがとうございます、あなたは伝説です:) – user759542

+0

@ user759542:これがあなたの必要なものかどうかは不明です(詳細について)。 –

+0

@ypercube、 'UserID = a.UserID'はあいまいかもしれません。 – danihp