2011-10-11 4 views
-1
SELECT r.game, u.username, r.userid, r.points, u.format 
FROM ".TBL_RANKING." r 
    INNER JOIN ".TBL_USERS." u 
    ON u.id = r.userid 
WHERE r.type = '1' AND r.game = 
      (SELECT name 
      FROM ".TBL_GAME." 
      WHERE active = '1' 
      ORDER BY rand() 
      LIMIT 1) 
    AND u.format = 
      (SELECT name 
      FROM ".TBL_FORMAT." 
     WHERE active = '1' 
      ORDER BY rand() LIMIT 1) 
ORDER BY r.points DESC LIMIT 5 

このクエリは動作していません。奇妙なユーザーを選択していることもあります。結合クエリのエラー

クエリが必要です。フォーマットテーブルからランダム形式-selectゲームテーブル からランダムゲーム-select -selectユーザーがゲームにランク付けされますが、ランダムな場合にのみフォーマットからそう

を選択選択は、Xbox 360のFIFA 12だった、それは

をフォーマットタイプのXbox 360からすべてのユーザーを見つけるだろうし、FIFA 12にランク付けされ、次のようにテーブルの構造は次のとおりです。

*tbl_ranking* 
id 
userid 
game 
points 
type 

*tbl_users* 
id 
username 
format 

*tbl_game* 
id 
name 

*tbl_format* 
id 
name 

誰も問題をここで見ることができますか?

答えて

1

は固定

SELECT r.game, u.username, r.userid, r.points, u.format 
    FROM TBL_RANKING r 
INNER JOIN TBL_USERS u 
    ON u.id = r.userid 
    LEFT JOIN (SELECT name FROM ".TBL_GAME." WHERE active = '1' ORDER BY rand() LIMIT 1) temp1 
    ON r.game=temp1.name 
    LEFT JOIN (SELECT name FROM ".TBL_FORMAT." WHERE active = '1' ORDER BY rand() LIMIT 1) temp2 
    ON u.format=temp2.name 
WHERE r.type = '1' 
    AND temp1.name != '' 
    AND temp2.name != '' 
ORDER BY r.points DESC LIMIT 5 
+0

に参加し、左使用してサブクエリを持ってしてみてください!パーフェクト、あなたはコードについて少し説明できますので、私は主な変更を理解し、なぜですか? – sark9012

+0

WHERE SubQueriesステートメントの条件を反映するLEFT JOINを使用し、temp1.name!= '' AND temp2.​​name!= ''の条件を使用してすべてのヌル値を削除しました。 – Bryan