Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19

Hybrid View

  1. #1
    Quote Originariamente inviata da MySQL Visualizza il messaggio
    Ma come non funziona? Funziona perfettamente!
    Quello che ti serve necessariamente è una selezione che ritorni una sola riga.
    Dallo screenshot che hai postato hai molti nomi uguali.

    NON funziona con qualcosa del tipo "nome='ANNA'" perchè potresti avere più righe con nome ANNA.

    Questo non va bene, ti serve una chiave primaria, un campo univoco che identifichi senza possibilità di errore "chi" vuoi cercare.
    La logica è banale: con una condizione test si verifica se la riga che cerchi è quella che vuoi (chessò l'utente vitren54), nel qual caso torna il numero progressivo, altrimenti null.
    Poi fa un aggiornamento (+1) della riga contatore, ed infine ordina per il campo aggiunto in testa, decrescente, prendendo la prima riga (il risultato corretto).
    Su mariadb 10.0.10 funziona di sicuro, ma non vedo perchè non dovrebbe con altre versioni.
    Ti assicuro che riproverò il tuo metodo...

    Quello che vorrei chiederti è come fai a dire e dove vedi nomi uguali?

    Dallo screenshot che hai postato hai molti nomi uguali

    in realtà Anna (come ogni altro nome) è univoco e il punteggio rappresenta il numero di Anne presenti.

    Ti assicuro che non faccio preferenze sui graditi suggerimenti ma, permettimi, alcuni si capiscono prima di altri.

    ti allego comunque un riepilogo delle prove effettuate con il tuo metodo e i risultati ottenuti

    Html05.jpg
    sicuramente non ho capito come impostare il test ma con Nicola (1° in classifica funziona) e con Sandra (2° in classifica non funziona) mi ritorna null anche se presente in archivio.

  2. #2
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Nessuno vuol proprio ragionare sulla mia risposta, eh?

  3. #3
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    C'è poi l'alternativa, che però dipende di più dai campi.
    In questo esempio li chiamo campo1, campo2 e campo3, dove campo1 è la chiave
    "riga" è il numero di riga; test è il nome della tabella.

    Se posti la tua tabella dati te la scrivo "personalizzata".

    codice:
    SELECT riga,campo1,campo2,campo3 FROM 
    (         
    SELECT @posizione:=@posizione+1 AS riga, campo1,campo2,campo3
    FROM test,(SELECT @posizione:=0) inutile
    ORDER BY qualcosa
    
    ) as result 
    WHERE campo1="quellochevuoi"
    In questo approccio deve esserci corrispondenza tra l'elenco dei campi, come sopra accennato.

    Se invece vuoi prendere tutti i campi (cosa in generale sconsigliato)
    codice:
    SELECT * FROM 
    (
    SELECT @posizione:=@posizione+ 1 AS riga, test.*
    FROM test,(SELECT @posizione:=0) inutile
    ORDER BY qualcosa
    ) as result 
    WHERE qualcosa="booohh"
    In sostanza devi avere coerenza tra l'ordine che imposti nelle righe (order by) e la ricerca (campo where)
    Ultima modifica di MySQL; 07-05-2015 a 17:55

  4. #4
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Allora
    codice:
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    Dà la lista ordinata
    codice:
    riga nome punteggio
    1 NICOLA 77
    2 SANDRA 74
    3 MICHELANGELO 73
    4 ORESTE 72
    5 AMBROGIO 71
    6 MAURO 70
    7 VALERIO 69
    8 ELISABETTA 68
    9 MICHELA 67
    codice:
    SELECT * FROM
    (
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    ) as result
    WHERE nome="NICOLA"
    Dà come risultato 1

    codice:
    SELECT * FROM
    (
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    ) as result
    WHERE nome="VALERIO"
    dà come risultato 7 e così via.

    Se vuoi solo la riga
    codice:
    SELECT riga FROM
    (
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    ) as result
    WHERE nome="SANDRA"
    Dà (solo) 2


  5. #5
    OK MySQL te la passo... funziona, semplice e risolve il problema...

    Grazie ancora a tutti.

  6. #6
    Quote Originariamente inviata da MySQL Visualizza il messaggio
    Allora
    codice:
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    Dà la lista ordinata
    codice:
    riga nome punteggio
    1 NICOLA 77
    2 SANDRA 74
    3 MICHELANGELO 73
    4 ORESTE 72
    5 AMBROGIO 71
    6 MAURO 70
    7 VALERIO 69
    8 ELISABETTA 68
    9 MICHELA 67
    codice:
    SELECT * FROM
    (
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    ) as result
    WHERE nome="NICOLA"
    Dà come risultato 1

    codice:
    SELECT * FROM
    (
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    ) as result
    WHERE nome="VALERIO"
    dà come risultato 7 e così via.

    Se vuoi solo la riga
    codice:
    SELECT riga FROM
    (
    SELECT @posizione:=@posizione+ 1 AS riga, nomi.*
    FROM nomi,(SELECT @posizione:=0) inutile
    ORDER BY punteggio desc
    ) as result
    WHERE nome="SANDRA"
    Dà (solo) 2

    confermo, che poi é uguale alla mia soluzione
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    confermo, che poi é uguale alla mia soluzione
    Bhè non direi.
    Primo perchè è successiva a quella che ho postato (post 3), ma in realtà perchè quello che hai messo non risolve il problema di cercare la k-esima riga data una chiave (o condizione where che dir si voglia).
    Sono possibili le due tipologie di soluzioni che ho postato, la prima con il campo dummy e limit (questa è specifica di MySQL), la seconda con la tecnica del finto nome.
    Non per polemizzare ma...

  8. #8
    x bomberdini

    Giusto... diamo a Cesare quello che è di Cesare.

    E' per questo motivo, e poi chiudiamo la discussione che ha risolto completamente il problema, che evidenzio nel metodo suggerito da

    Quote Originariamente inviata da k.b Visualizza il messaggio
    L'esempio che ti e' stato postato funziona se estrai tutta la classifica, se vuoi estrarre solo una persona e sapere la sua posizione puoi semplicemente fare una query che conta quante persone hanno un punteggio minore di quello della persona in questione.
    una lieve differenza che la rende migliore.

    Il metodo suggerito da k.b. tratta i nomi con pari punteggio allo stesso modo e gli attribuisce la stessa posizione.


  9. #9
    Quote Originariamente inviata da vitren54 Visualizza il messaggio
    x bomberdini

    Giusto... diamo a Cesare quello che è di Cesare.

    E' per questo motivo, e poi chiudiamo la discussione che ha risolto completamente il problema, che evidenzio nel metodo suggerito da



    una lieve differenza che la rende migliore.

    Il metodo suggerito da k.b. tratta i nomi con pari punteggio allo stesso modo e gli attribuisce la stessa posizione.

    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

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 © 2026 vBulletin Solutions, Inc. All rights reserved.