Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    ordinamento tra colonne

    Ho una query del tipo:

    SELECT cognome, nome, CONCAT(cognome,' ',nome) as colonna1 FROM `clienti`

    che darà nella colonna1 i vari risultati:

    ROSSI CARLO
    BIANCHI GRETA
    VERDI EMILIO

    Sò che a prima vista non avrà molto senso (ovviamente il mio campo di applicazione è ben diverso e più complesso) ma come faccio ad avere quello che per primo tra i due (cognome o nome) viene prima in ordine alfabetico?

    Vorrei che restituisse NELLA colonna1:

    CARLO ROSSI
    BIANCHI GRETA
    EMILIO VERDI

    lasciando inalterati (o ordinandoli successivamente i record tra loro) ma ordinando il nome per primo se nel record nome venisse prima rispetto al cognome seguendo il criterio alfabetico.
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2

  3. #3
    mysql
    Prima o poi anch'io vi insegnerò qualcosa

  4. #4
    puoi usare una CASE WHEN; prova, poi casomai ti si dà una mano

  5. #5
    Il mio vero problema, credo sia che non conosco come confrontare in modo che siano ordinati alfabeticamente i due valori di ogni record.
    Ho provato in questo modo, ma mi ha dato risultato strano.

    SELECT cognome, nome,
    CASE WHEN cognome > nome THEN CONCAT(cognome,' ',nome)
    WHEN nome < cognome THEN CONCAT(nome,' ',cognome)
    ELSE NULL
    END AS colonna1
    FROM `clienti`
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    la strada è giusta, ma ci sono un paio di errori:
    - se un elemento è maggiore dell'altro, se vuoi l'ordine dal più piccolo al più grande devi mettere prima il minore e poi il maggiore
    - visto che hai solo un'opzione binaria, ti basta THEN opzione1 ELSE opzione2

  7. #7
    ma non basta aggiungere " order by colonna1" ?
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  8. #8
    no, perché si vuole un ordinamento tra i valori di due colonne, riga per riga

  9. #9
    ... mi era sfuggito all'esempio.

    Quindi si devono creare due array contenenti i numeri di record con gli ordinamenti diversi (uno per cognome e l'altro per nome)
    Poi vanno estratti i record che prima compaiono tra i due ordinamenti e scartare quelli già prelevati.
    Mando il link di una immagine per far meglio capire. A parole è complicato.

    Con 2 array risolvi tutto. Se non è molto chiaro cercherò di spiegare meglio
    Ultima modifica di SoloWiFi; 07-04-2024 a 11:00
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  10. #10
    ma no, si fa tutto con una query, guarda che la soluzione di riccardo1975 è vicinissima all'ottimale, giusto una sistematina

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.