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?
Printable View
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?
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
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:- 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)Codice:SELECT [elenco campi]
FROM [elenco tabelle]
WHERE [condizioni di selezione o filtro]
ORDER BY [criteri di ordinamento {ASC | DESC}]
Statemi bene...
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.Citazione:
Originalmente inviato da skydrake
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
:)))))
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
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
boh. ora sono curioso. prima volta che ho tempo guardo la differenza in termini di tempo inpiegato dalla query a fornire il risultato desiderato.
guarda quanto tempo impiega google a darti un risultato e quelli sicuramente hanno piu' di 20mila righe e ti danno piu' di un risultato...