Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [MySql] order by...?

  1. #1

    [MySql] order by...?

    Salve,

    ho installato il server mysql su due computer diversi ,entrambi pur lavorando in locale hanno database identici.
    utilizzando la seguente istruzione con mysql query browser ottengo i risultati ordinati in modo differente:

    "SELECT * WHERE ragione LIKE 'a%' ORDER by ragione LIMIT 40,20"

    come è possibile?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In modo "differente" ... che intendi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    In modo "differente" ... che intendi?
    il primo computer dà questi risultati
    codice:
    8763, '...',
    23516, '...', 
    26516, '...', 
    5516, '...', ...
    20516, '...', ...
    17516, '...', ...
    2516, '...', ...
    11516, '...', ...
    8516, '...', ...
    29516, '...', ...
    14516, '...', ...
    2316, '  ...',...
    20316, '  ...',...
    14316, '  ...',...
    5316, '  ...',...
    17316, '  ...',...
    11316, '  ...',...
    29316, '  ...',...
    26316, '  ...',...
    8316, '  ...',...
    mentre il secondo dà questi risultati :
    codice:
    11516, '...', ...
    23516, '...', 
    20516, '...', ...
    26516, '...', 
    5516, '...', ...
    8763, '...',
    17516, '...', ...
    2516, '...', ...
    8516, '...', ...
    29516, '...', ...
    14516, '...', ...
    8316, '  ...',...
    20316, '  ...',...
    14316, '  ...',...
    5316, '  ...',...
    26316, '  ...',...
    17316, '  ...',...
    11316, '  ...',...
    29316, '  ...',...
    2316, '  ...',...
    come puoi vedere gli ID vengono ordinati in modo diverso nonostante l'interrogazione sql sia la stessa
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Questo può accadere se i dati su cui viene effettuato l'ordinamento sono identici.
    Mi spiego meglio: nella query chiedi di ordinare in base al campo "ragione". Se i dati contengono lo stesso valore per tale campo (ad esempio, ci sono 40 record con lo stesso valore per tale campo), l'ordinamento può produrre risultati diversi. Questo perchè non viene garantito che i dati vengano "estratti" esattamente nello stesso ordine.

    Dal punto di vista formale, questo comportamento è perfettamente lecito: 40 record con lo stesso valore per il campo "ragione" possono uscire in qualunque ordine, tanto la richiesta è comunque soddisfatta.

    Esempio per capire meglio. Se posseggo una tabella con questi due record:
    codice:
    ID   Ragione   Indirizzo
    -------------------------
    1    Pippo     Via Uno
    2    Pippo     Via Due
    E chiedo di visualizzarli ordinati secondo il campo "Ragione", che io li veda nell'ordine esposto sopra, o invertiti, dal punto di vista formale non c'è alcuna differenza: essi sono comunque ordinati secondo il campo "Ragione" e la mia richiesta è soddisfatta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da LeleFT
    ..cut...
    ah....quindi in questi casi devo accettare che il risultato può variare in modo "randomico" senza alcun controllo oppure posso intervenire su qualche impostazione del mysql server?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No scusa ... il risultato e' corretto se chiedi di ordinare solo secondo il campo

    ragione

    Se, a parita' di dati, devi ordinare per ID, allora scrivi

    ORDER BY ragione, ID
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sinceramente non credo che esista qualche impostazione di questo tipo, ma se il problema è solo quello di visualizzare i record nello stesso ordine, ti conviene cambiare la query, aggiungendo anche il campo ID come richiesta di ordinamento:
    codice:
    SELECT * WHERE ragione LIKE 'a%' ORDER by ragione, id LIMIT 40,20
    In questo modo i record verranno ordinati prima secondo il campo "ragione" e poi secondo il campo "id".

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.