Visualizzazione risultati 1 fino 9 di 9

Discussione: ordinare database

  1. #1
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito ordinare database

    la domandona catartica tanto attesa:
    e come posso ordinare un database mysql? esiste qualche funzione già bella pronta tipo, ordina in base al valore di questa colonna, assegna a questa colonna il numero di ordine così generato?

  2. #2
    L'avatar di seneca
    seneca non è connesso Super Moderatore
    Data registrazione
    18-12-2004
    Residenza
    la Città Eterna
    Messaggi
    8,376

    Predefinito

    un modo è semplicemente con la query-base
    SELECT dato FROM tabella ORDER BY (nomecolonna da usare come key).

    altrimenti estrai i dati che vuoi in un array e poi ordini l'array in qualche modo
    Ultima modifica di seneca : 23-08-2006 alle ore 23.26.51


    -- Aut Roma Aut Nihil!

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Cerco di chiarire un po' le cose:
    - "ordinare un database", tecnicamente, non è possibile, almeno inteso come memorizzare i dati ordinandoli già a piacimento. Questo perché i dati risulteranno ordinati in base ad un complesso sistema di indici (noto soltanto a chi ha creato il DBMS - sistema di gestione del DB) che hanno lo scopo di velocizzare il maggior numero possibile di ricerche.
    - puoi, grazie anche a questi indici, estrarre i dati nell'ordine che preferisci: una query un po' più completa di quella di seneca è questa:
    Codice:
    SELECT [elenco campi]
    FROM [elenco tabelle]
    WHERE [condizioni di selezione o filtro]
    ORDER BY [criteri di ordinamento {ASC | DESC}]
    - per quanto riguarda le tue esigenze, hai davvero bisogno di inserire in un campo del database la posizione del record nell'ordine che stabilisci? Perché è buona norma NON inserire nel database dati che possono essere facilmente ricavati da altri (in questo caso, elencando i record in ordine e assegnando il numero via script)

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    beh, mi pareva che farlo una volta sola e poi averlo gia fatto usasse si un po' di spazio in più, ma poi richiedesse meno tempo per le query.
    comunque ora guardo come funge e decido se ordinarlo effettivamente o solo usare la query che mi suggerite. grazie a tutti.

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da skydrake
    beh, mi pareva che farlo una volta sola e poi averlo gia fatto usasse si un po' di spazio in più, ma poi richiedesse meno tempo per le query.
    comunque ora guardo come funge e decido se ordinarlo effettivamente o solo usare la query che mi suggerite. grazie a tutti.
    tu non hai potere di ordinare il db.
    Inoltre tenerlo ordinato e inserire in maniera ordinata (perchè se vuoi averlo ordinato devi anche inserire in maniera ordinata) costerebbe piu' che a tenerlo ordinato e ad ordinarlo ogni qual volta che ti serve...

    Non so se mi HO spiegato bene

    :)))))

  6. #6
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    per tenerlo ordinato intendevo poter scrivere una query del genere:
    select nick from table where rank=10344

    che è una semplice ricerca della riga il cui rank vale 10344

    che porta via poco tempo

    mentre non avendo una colonna rank e volendo fare una query tipo

    select nick from table order by punteggio DESC LIMIT 10343,10344
    mi occupa molto più tempo macchina. in fondo prima lo ordina ogni volta... e sono una bella dose di dati da valutare.

    potrei anche scrivere una funzione di ricerca più veloce ad hoc, tipo una bella ricerca logaritmica che potrebbe portare a casa il risultato (quasi, ovvero nel caso migliore in cui tutti i punteggi siano pieni e singoli) in log(2)(n) passaggi.
    ma questo solo per la ricerca di una singola posizione... e dovrei rifare il codice ogni volta...

    preferisco sacrificare un po' di spazio in tal caso circa 20000 integer... credo siano sui 80k di spazio se un integer occupa 4 byte... non ricordo... comunque dovrebbe essere una stima per eccesso...

    certo, le righe non sono inserite in ordine, ma possono essere lette singolarmente seguendo l'ordine.

    quindi a me basta ordinarlo 1 volta quando aggiorno la tabella, e poi ho la pappa pronta per tutti quelli che verranno a leggerla.

    ora non ho ancora 20mila righe...
    per ora sono a 500
    ma il discorso regge, e le 20k righe arriveranno e dovranno essere gestite :(
    quindi perchè non essere pronti :D

  7. #7
    Guest

    Predefinito

    non ho capito quanto hai detto. Cmnq 20000 righe non sono niente per un db e un db ha una funzione di ricerca che è migliore di lgn. Ci hanno studiato per anni sui dbms. Non pensare di poter scrivere una tua funzione di riceca migliore di quello che hanno i dbms

  8. #8
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    boh. ora sono curioso. prima volta che ho tempo guardo la differenza in termini di tempo inpiegato dalla query a fornire il risultato desiderato.

  9. #9
    Guest

    Predefinito

    guarda quanto tempo impiega google a darti un risultato e quelli sicuramente hanno piu' di 20mila righe e ti danno piu' di un risultato...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •