Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Group by e rank

  1. #1

    Group by e rank

    Salve avrei da mostrare una tabella che sia un riepilogo di informazioni da due tabelle ed un rank, ma ho problemi in quest'ultimo

    codice:
    users
    +----+---------------+
    | id | idcorporation |
    +----+---------------+
    
    corporations
    +---------------+------+---------+--------+
    | idcorporation | name | acronym | points |
    +---------------+------+---------+--------+
    Avrei bisogno di un SELECT che mostri quanti membri ha ogni corporation ed il rank in base ai punti.
    Intanto chiedo se secondo voi dovrei fare magari una tabella derivata tramite CREATE VIEW
    Oppure usare altre soluzioni. Utilizzo engine MyISAM
    Ho provato questo:

    SET @rank=0;
    SELECT @rank:=@rank+1 AS rank,
    c.idcorporation,
    COUNT(*) AS members,
    c.acronym,
    c.name,
    c.points
    FROM corporations c,users u
    WHERE c.idcorporation=u.idcorporation
    GROUP BY c.idcorporation
    ORDER BY points DESC

    Come si vede sotto non funziona in quanto crea il rank in base all'id della corporation e non in base ai points

    codice:
    rank idcorporation members acronym name points
    1	1	2	NASA	National Aeronautics and Space Administration	52103
    3	19	1	RKA	Russian Federal Space Agency			30223
    6	22	2	CNSA	China National Space Administration		20214
    5	21	1	ESA	European Space Agency				18041
    4	20	1	ASI	Agenzia Spaziale Italiana			1234
    2	2	3	JAXA	Japan Aerospace Exploration Agency		1231
    Il Cavaliere dei Sogni

  2. #2
    Il problema del GROUP BY è che esegue il SORT sull'attributo di raggruppamento (cioè idcorporation, non points) PRIMA di generare i gruppi, quindi non trovo strano che esegua il SORT su idcorporation.

    Prova a raggruppare anche in base ai punti (genera gli stessi gruppi, poiché a ogni idcorporation corrisponde uno e un solo punteggio):

    Codice PHP:
    SET @rank=0;
    SELECT @rank:=@rank+AS rank,
    c.idcorporation,
    COUNT(*) AS members,
    c.acronym,
    c.name,
    c.points
    FROM corporations c
    ,users u
    WHERE c
    .idcorporation=u.idcorporation
     GROUP BY points
    c.idcorporation
     ORDER BY points DESC
    c.idcorporation ASC 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.