Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Order By

  1. #1

    Order By

    ciao

    ho il campo di una tabella dove sono inseriti i codici prodotti in questo modo:

    L11
    L10
    L9
    S203

    quando estraggo i dati e ordini in ordine alfabetico ed esce

    L10
    L11
    L9
    S203

    questo è corretto essendo il criterio alfanumerico, vorrei però ordinarli con criterio alfanuemrico solo per la prima stringa mentre per dalla seconda in poi con criterio numerico in modo che esca

    L9
    L10
    L11
    S203

    qualcuno mi sa aiutare?

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Credo che l'unico modo sia quello di andare di 10 replace annidati per eliminare prima la parte numerica e crearti un campo dellla parte letterale, poi sempre allo stesso modo creare il campo della parte numerica e infine ordinare per letterale,numerico.

    Non so se ci siano alternative.

  3. #3
    questa query dovrebbe fare al caso tuo:

    codice:
    SELECT * FROM tabella ORDER BY CAST( SUBSTRING( cod_prodotto, 1, 1 ) AS CHAR ), CAST( SUBSTRING( cod_prodotto, 2 ) AS UNSIGNED )
    sempre che la parte "stringa" sia sempre lunga 1 carattere, altrimenti non va





    p.s. http://dev.mysql.com/doc/refman/4.1/...functions.html
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da 13manuel84
    questa query dovrebbe fare al caso tuo:

    codice:
    SELECT * FROM tabella ORDER BY CAST( SUBSTRING( cod_prodotto, 1, 1 ) AS CHAR ), CAST( SUBSTRING( cod_prodotto, 2 ) AS UNSIGNED )




    p.s. http://dev.mysql.com/doc/refman/4.1/...functions.html
    Hai ragione Manuel. Nel caso la parte letterale sia sempre di una sola lettera è più che sufficiente.

  5. #5
    grazie ora provo,

    se il cliente mi inserisce prodotti con più lettere invece, devo dividerlo su due campi o c'è un'altra soluzione

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Se la parte letterale e quella numerica hanno lunghezza variabile prova così

    codice:
    select *, 
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(nome_campo,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','') 
    as letterale, cast(substring(nome_campo
    from length( 
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(nome_campo,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','')
    )+1) as unsigned)
    as numerico
    from tabella order by letterale,numerico asc

  7. #7
    Originariamente inviato da nicola75ss
    Se la parte letterale e quella numerica hanno lunghezza variabile prova così



    piccolina come query


    non vorrei che richiedesse un esagerazione di tempo in esecuzione...

    se il lciente ha bisogno che la parte letterale sia più lunga, io farei direttamente due campi distinti e in inserimento farei semplicemente uno split tra la parte letterale e quella numerica, e poi ordinerei secondo i due campi che ho formato...
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da 13manuel84
    piccolina come query


    non vorrei che richiedesse un esagerazione di tempo in esecuzione...

    se il lciente ha bisogno che la parte letterale sia più lunga, io farei direttamente due campi distinti e in inserimento farei semplicemente uno split tra la parte letterale e quella numerica, e poi ordinerei secondo i due campi che ho formato...
    Pienamente d'accordo con te sull'impostazione.

  9. #9
    si infatti divido i campi

    grazie

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