Classifica

edoo

Nuovo Utente
8 Ago 2013
21
0
0
ciao a tutti ho l'esigenza di creare una classifica per una gara, nella classifica possono apparire solo gli utenti che si sono registrati al sito, quelli non registrati no
io ho 2 tabelle:
la tabella classifica con la lista delle persone registrate e non con nome cognome e punteggio
e la tabella utenti registrati: dove ci sono i campi nome cognome user che l'utente dovrà inserire...
come faccio a mostrare solo gli utenti che si sono registrati della tabella classifica??
ho provato a fare così ma credo sia sbagliato, io volevo confrontare il nome dell'utente della tabella classifica con quello della tabella utenti registrati, se lo trovava mi mostrava il nome e gli altri dati...
PHP:
<?php if($row_RS_classifica['nome']== $row_RS_utenti_reg['nome']) {?>
                        <td><?php echo $row_RS_classifica['posizione']; ?>°</td>
                        <td class="user-name">
<?php echo $row_RS_classifica['nome'] ?> <?php echo $row_RS_classifica['cognome']; ?>
                    </td>
                        

                        <td class="user-punti"><?php echo $row_RS_classifica['punti']; ?>
                          </td>
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
la prima cosa da impostare è la query che seleziona gli elementi dal database, che può essere,
Codice:
select 
  utenti_registrati.nome
 ,utenti_registrati.cognome
 ,classifica.punteggio
 ,classifica.posizione
from utenti_registrati, classifica
where classifica.cognome=utenti_registrati.cognome
and   classifica.nome=utenti_registrati.nome
order by classifica.posizione, classifica.punteggio, utenti_registrati.cognome, utenti_registrati.nome

a questo punto imposti la lettura del database,
e facendoti restituire una riga per volta, ottieni la lista

potrebbe andare anche come hai scritto tu, sistemando il codice, ma è una via più laboriosa e critica
perchè devi pareggiare le letture dalle due tabelle
mentre, se ti va bene, la select soprastante ti restituisce gli elementi già pareggiati
ciao
Marino
 

edoo

Nuovo Utente
8 Ago 2013
21
0
0
Grazie mille ora funziona sei stato gentilissimo :fonzie:
Se ti posso chiedere un'ultima cosa, riguardante la posizione in classifica, la devo sempre aggiornare io o c'è un modo per calcolarla in base al punteggio dell'utente? ancora grazie
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
la posizione in classifica, la devo sempre aggiornare io o c'è un modo per calcolarla in base al punteggio dell'utente?

attento, la mia prova è stata fatta con MS SQL,

questa è l'update,

Codice:
UPDATE classifica
SET [posizione] = t2.[posizione]
FROM classifica t1
LEFT OUTER JOIN 
(
  SELECT
    nome
  , cognome
  , punti
  , Rank() OVER (ORDER BY punti desc) as [posizione]
  FROM classifica
) as t2 
  ON t1.nome = t2.nome
  AND t1.cognome = t2.cognome

io l'ho provata così,

Codice:
DECLARE @classifica TABLE
(
nome nvarchar(100),
cognome nvarchar(100),
punti int,
[posizione] int
)

INSERT INTO @classifica VALUES('Paolo',  'Settimo',            1, -1)
INSERT INTO @classifica VALUES('Luca',   'Sesto',             11, -1)
INSERT INTO @classifica VALUES('Luigi',  'Quinto',            13, -1)
INSERT INTO @classifica VALUES('Andrea', 'Terzo pari merito', 16, -1)
INSERT INTO @classifica VALUES('Sonia',  'Terza pari merito', 16, -1)
INSERT INTO @classifica VALUES('Luisa',  'Seconda',           17, -1)
INSERT INTO @classifica VALUES('Anna',   'Prima',             18, -1)

UPDATE @classifica
SET [posizione] = t2.[posizione]
FROM @classifica t1
LEFT OUTER JOIN 
(
  SELECT
    nome
  , cognome
  , punti
  , Rank() OVER (ORDER BY punti desc) as [posizione]
  FROM @classifica
) as t2 
  ON t1.nome = t2.nome
  AND t1.cognome = t2.cognome

SELECT posizione, punti, nome, cognome from @classifica order by posizione

e questo è il risultato

1 18 Anna Prima
2 17 Luisa Seconda
3 16 Andrea Terzo pari merito
3 16 Sonia Terza pari merito
5 13 Luigi Quinto
6 11 Luca Sesto
7 1 Paolo Settimo

fammi sapere se update va bene con mysql
ciao
Marino
 

edoo

Nuovo Utente
8 Ago 2013
21
0
0
Ciao, scusa, ieri non sono riuscito a provare il codice che mi hai dato, oggi lo faccio e ti dico, grazie
 

edoo

Nuovo Utente
8 Ago 2013
21
0
0
sinceramente non riesco a farlo funzionare, da phpmyadmin ci provo ma mi restituisce questo errore
Codice:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM utenti t1 LEFT OUTER JOIN ( SELECT nome , cognome , punti ' at line 3

UPDATE utenti
SET posizione = t2.posizione
FROM utenti t1
LEFT OUTER JOIN 
(
  SELECT
    nome, cognome, punti, Rank() OVER (ORDER BY punti desc) as posizione
  FROM utenti
) as t2 
  ON t1.nome = t2.nome
  AND t1.cognome = t2.cognome
ma probabilmente è colpa mia non sono molto pratico, Grazie comunque
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
penso che il codice non sia compatibile con mysql,

ho pensato ad un secondo modo, che dovrebbe essere a prova di mysql,
non fa update perché non ho potuto provarlo,
esegui tutto come unico codice (è solo select, non rovina nulla)
e fammi sapere se calcola bene la posizione
ciao
Marino

ps, punti deve essere maggiore di, o uguale a zero !

Codice:
set @con =0,
set @pos =1;
set @pun =-1;
SELECT  nome,
        cognome,
        punti,
        posizione
FROM
(
  SELECT  nome,
          cognome,
          punti,
          @con := @con+1,
          @pos := if(@pun=punti, @pos, @con) as posizione,
          @pun := punti     
  FROM
  (
    SELECT  nome,
            cognome,
            punti,
    FROM    utenti
    ORDER BY punti DESC, cognome, nome
) A
) B;
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
Tommy03 Algoritmo classifica SQL MySQL 0
M [PHP] Elenco con "classifica" delle informazioni nel db PHP 3
cristoforo58 Classifica PHP MySQL PHP 2
primis Classifica Facebook Offerte e Richieste di Lavoro e/o Collaborazione 0
R Creare una classifica con Access 2007 Database 1
M Aggiornare valori in mysql (classifica) PHP 8
Web Designer Classifica 2012 dei migliori antivirus in commercio Sicurezza e Virus 9
P Script per classifica Tipster CMS (Content Management System) 2
G Script per Classifica PHP 2
B Classifica PHP 76
cosov Estrarre valori unici per classifica Classic ASP 4
M php script per classifica PHP 2
O classifica parimerito Classic ASP 1
N Problema Classifica gioco Flash 1
D Chi mi può aiutare nel fare 1 classifica? PHP 1
S Classifica Gioco Flash 2
A Assegnare rango ad una classifica in MS Access MS Access 1
A Da prompt java a classifica Javascript 1
M Promuovi il tuo sito nella nuova classifica della SABA Top100 SEO e Posizionamento 0
N Creazione classifica per gioco HTML e CSS 1
L classifica amministrative... provinciali... Leggi, Normative e Fisco 0
G votare una classifica Classic ASP 2
C Sito in classifica Supporto Mr.Webmaster 2
G votare una classifica HTML e CSS 3
peppoweb Classifica annuale delle 50 persone più importanti e influenti del Web. Discussioni Varie 3

Discussioni simili