Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    107

    un ordinamento assai complicato...

    Sinceramente dubito che sia possibile fare quello che vorrei con una sola query, ma tentare non nuoce e siccome il forum è frequentato da molte persone più brave di me, ci provo:

    ho una tabella con la seguente struttura:


    ____________________________
    | cod | ordinamento | nome |
    |_____ |____________ |_______|
    | 001 | 1 | ... ... |
    | 002 | 10 | ... ... |
    | 003 | 2 | ... ... |
    | 101 | 100 | ... ... |
    | 102 | 1 | ... ... |
    | 103 | 2 | ... ... |
    | 201 | 50 | ... ... |
    | 202 | 1 | ... ... |
    |_____|_____________|_______|


    Il campo COD serve per raggruppare i record. In pratica il primo carattere individua la categoria di appartenenza, gli altri due le diverse categorie che appartengonoalla stessa categoria "padre".
    Mi serve query che mi restituisce i record ordinati secondo il valore del campo ordinamento DESC mantenendo però il raggruppamento per categoria: in pratica il risultato dell'esempio precedente dovrebbe essere:



    ____________________________
    | cod | ordinamento | nome |
    |_____ |____________ |_______|
    | 101 | 100 | ... ... |
    | 103 | 2 | ... ... |
    | 102 | 1 | ... ... |
    | 201 | 50 | ... ... |
    | 202 | 2 | ... ... |
    | 002 | 10 | ... ... |
    | 003 | 2 | ... ... |
    | 001 | 1 | ... ... |
    |_____|_____________|_______|


    Risolvere il problema a codice chiamando ricorsivamente più query è facile, ma temo sia troppo dispendioso...
    Eccellente sarebbe trovare qualcuno in grado di fare la stessa cosa con una query sola... ma è possibile?

    Grazie infinite...
    ciao

  2. #2
    mis a che qui ci vuole MySQL 5 ed una stored procedure apposita...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    107


    come temevo... è che il mio server monta la versione 3 e spicci....
    e io mi attacco!!!!!

    comunque grazie...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    SELECT *,SUBSTRING(cod, 1, 1) AS cod_ord FROM `oggetti` ORDER BY cod_ord ASC, ordinamento DESC
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    107
    mhmmhhm...
    non mi pare che così possa andare....
    Così ordina correttamente all'interno dei gruppi, ma i gruppi non sono ordinati rispetto il campo "ordinamento", bensì rispetto al codice identificativo (cioè il primo carattere).
    In pratica mi pare che in questo modo ottengo il seguente output:
    ________________________
    | cod | ordinamento | nome |
    |_____ |_________ |_______|
    | 002 | 10 | ... ... |
    | 003 | 2 | ... ... |
    | 001 | 1 | ... ... |
    | 101 | 100 | ... ... |
    | 103 | 2 | ... ... |
    | 102 | 1 | ... ... |
    | 201 | 50 | ... ... |
    | 202 | 2 | ... ... |
    |_____|___________

    e non
    ____________________________
    | cod | ordinamento | nome |
    |_____ |____________ |_______|
    | 101 | 100 | ... ... |
    | 103 | 2 | ... ... |
    | 102 | 1 | ... ... |
    | 201 | 50 | ... ... |
    | 202 | 2 | ... ... |
    | 002 | 10 | ... ... |
    | 003 | 2 | ... ... |
    | 001 | 1 | ... ... |
    |_____|_____________|_______|


    come vorrei io.
    Comunque grazie dell'attenzione... se ti va continiamo a pensarci.. chissà che assieme non si trovi la soluzione...
    :master:

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    asp... tu vorresti prima il valore più alto, quindi tutti quelli del gruppo con lo stesso cod in ordine decrescente, e via dicendo per i gruppi rimasti?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    107
    esatto! vorrei prima ordinare i gruppi (in base al valore di ordinamento) e poi i valori all'interno di ogni gruppo (sempre in base al valore di ordinamento). Quello che posso fare per semplificare un po' le cose è quello di individuare all'interno di ciascun gruppo un "capogruppo" che è quello che mi da indicazioni sull'ordinamento fra i gruppi.
    Diciamo che posso aggiungere ad ogni gruppo l'elemento |cod_gruppo|00 (es. 000,100,200) il cui valore di ordinamento mi dice qual'è l'ordine dei gruppi. In pratica la tabella ordinata diventa:

    ________________________
    | cod | ordinamento | nome |
    |_____ |_________ |_______|
    | 000 | 3 | ... ... |
    | 002 | 10 | ... ... |
    | 003 | 2 | ... ... |
    | 001 | 1 | ... ... |
    | 100 | 2 | ... ... |
    | 101 | 100 | ... ... |
    | 103 | 2 | ... ... |
    | 102 | 1 | ... ... |
    | 200 | 3 | ... ... |
    | 201 | 50 | ... ... |
    | 202 | 2 | ... ... |
    |_____|_______|

    Grazie ancora... e forza.. che piano piano ce la facciamo....

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    107
    UP!

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    la tua ultima tabella provoca confusione...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    107
    ok... provo ad essere più chiaro.
    Il codice di 3 cifre è formattato in modo che la prima cifra individui il gruppo di appartenenza, le altre 2 i singoli elementi del gruppo. Io vorrei innanzi tutto ordinare i gruppi e per farlo uso il campo ordinamento (DESC). Fatto questo voglio ordinare gli elementi all'interno del gruppo e per farlo uso ancora il campo ordinamento (DESC). Per ogni gruppo ho un elemento CAPOGRUPPO che mi serve proprio ad individuare il valore di ordinamento del gruppo che NON è in relazione con il valore di ordinamento dei singolli elementi contenuti nel gruppo stesso.
    Tornando alla tabella, IN EFFETTI AVEVO SCRITTO UNA CAVOLATA: il record 200 ha come valore di ordinamento 1 e non 3 perché sennò tutto il gruppo sarebbe salito più in alto nell'ordinamento. In grassetto ho evidenziato i capogruppo che correttamente hanno valore di ORDINAMENTO descrescente, così come decrescente è il valore di ORDINAMENTO dei singoli record di ogni gruppo.

    | cod | ordinamento | nome |
    |_____ |_________ |_______|
    | 000 | 3 | ... ... |
    | 002 | 10 | ... ... |
    | 003 | 2 | ... ... |
    | 001 | 1 | ... ... |
    | 100 | 2 | ... ... |
    | 101 | 100 | ... ... |
    | 103 | 2 | ... ... |
    | 102 | 1 | ... ... |
    | 200 | 1 | ... ... |
    | 201 | 50 | ... ... |
    | 202 | 2 | ... ... |
    |_____|_______|


    GRAZIE INFINITE PER L'INTERESSE...
    :master:

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.