1

次の表があります。

Table "Questoes";
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| id_quest | int(11)      | NO   |     | NULL    |                |
| questao  | varchar(255) | NO   |     | NULL    |                |
| nivel    | int(11)      | NO   |     | NULL    |                |
| tipo     | varchar(255) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

Table "Resultados";

+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| id_user   | int(11) | NO   | MUL | NULL    |                |
| nivel     | int(11) | NO   |     | NULL    |                |
| pontuacao | int(24) | NO   |     | NULL    |                |
| data      | date    | NO   |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

And table "utilizador";
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id_user   | int(11)      | NO   | PRI | NULL    | auto_increment |
| id_tipo   | int(11)      | NO   |     | 1       |                |
| username  | varchar(50)  | NO   | UNI | NULL    |                |
| password  | varchar(20)  | NO   |     | NULL    |                |
| nome      | varchar(50)  | NO   |     | NULL    |                |
| email     | varchar(100) | NO   |     | NULL    |                |
| data_nasc | text         | NO   |     | NULL    |                |
| e_valido  | smallint(6)  | NO   |     | 0       |                |
+-----------+--------------+------+-----+---------+----------------+

私が必要としているのは、最高のプレイヤーに対するテーブル「resultados」の各レベル (フィールド「nivel」) の最大スコア (フィールド「pontuacao」) です。プレイヤー名を取得するには、テーブル "resultados" のフィールド "id_user" を使用します。

私はこれを持っていますが、うまくいきません:

SELECT u.id_user, MAX(u.pontuacao), u.nivel, u.data, l.nivel, r.id_user, r.username
FROM questoes l, resultados u, utilizador r
WHERE u.nivel = l.nivel AND r.id_tipo=1 AND u.id_user=r.id_user
GROUP BY u.nivel    
4

2 に答える 2

1
SELECT a.id_user, r.username, b.pontuacao, b.nivel
FROM resultados a
INNER JOIN utilizador r on a.id_user=r.id_user 
INNER JOIN (SELECT u.nivel, MAX(u.pontuacao) pontuacao
            FROM resultados u
            GROUP BY u.nivel) b ON a.nivel = b.nivel AND a.pontuacao = b.pontuacao
于 2013-08-27T16:09:20.413 に答える
1

期待どおりに機能しない MySQL の拡張機能に依存しているため、機能しません。を使用する場合group byは、 内のすべての列がselect集約されているか、 内にあることを確認してgroup byください。

あなたが望むのはもっと似ています:

SELECT u.id_user, r2.pontuacao, u.nivel, u.data, l.nivel, r.id_user, r.username
FROM questoes l join
     resultados u
     u.nivel = l.nivel join
     utilizador r 
     on u.id_user = r.id_user join
     (select r2.nivel, max(r2.pontuacao) as maxp
      from resultados r2
      group by r2.nivel
     ) r2
     on u.nivel = r2.nivel and u.pontuacao = r2.maxp
WHER r.id_tipo = 1
GROUP BY u.nivel;

これは、サブクエリとして最大値を計算し、それを再び結合します。group byこの後の は必要ない場合があります。また、適切な ANSI 構文を使用するように結合を修正しました。

于 2013-08-27T16:09:58.150 に答える