Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153

    Ordinamento valori su database Mysql

    Salve a tutti, io avrei l'esigenza di effettuare una query su database mysql per recuperare dei dati, solo che vorrei che fossero ordinati in modo crescente, che siano al massimo 20 valori e che, questo è il punto principale, l'ultimo valore richiamato corrisponda anche all'ultima riga del database.

    Mi spiego con un esempio, la query che attualmente ho scritto è questa:

    SELECT ID, DATO1, DATO2, DATON FROM TABELLA ORDER BY ID LIMIT 20

    Ma in questo caso io ho sempre i valori del campo ID compresi tra 1 e 20, anche se nella tabella ce ne fossero 500. Io invece vorrei che se nella tabella ci sono, diciamo, 35 righe, lui mi prenda sempre i 20 valori compresi fra 15 e 35; se ci fossero 60 righe i valori dovrebbero essere compresi fra 40 e 60, e così via.

    In pratica dovrebbe richiamarli in ordine decrescente e poi ordinarli in modo crescente, spero di essermi spiegato. Qualcuno ha qualche idea?

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    In pratica vuoi gli ultimi 20 ma ordinati in ordine crescente.
    Allora la query diventa così

    codice:
    TABELLA ORDER BY ID DESC LIMIT 20
    I risultati potresti metterli in un array e scorrerli al contrario...

    Roby

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153
    Il problema è che poi i risultati derivati dalla query sul database vengono ordinati in questa maniera

    while ($row=mysql_fetch_array($query)){
    $ID=$row["ID"];
    $DATO1=$row["DATO1"];
    $DATO2=$row["DATO2"];
    $DATON=$row["DATON"];

    echo "$ID, $DATO1, $DATO2, $DATON";
    }

    come faccio a dirgli che li voglio ordinati al contrario?

  4. #4
    Un bel puzzle linguistico.... :master:

    se ti interessano i valori compresi tra 40 e 60 ordinati in modo ascendente....

    ORDER BY id ASC LIMIT 40, 21

    se ti servono ordinati a testa in giu' allora come ti ha detto Roby_72.


    altrimenti non si e' capito cosa hai detto....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153
    Mi serve recuperare sempre 20 valori, ordinati dal più piccolo al più grande ma facendo in modo che l'ultimo valore dell'elenco corrisponda anche all'ultimo valore del database.

    Non è detto che siano per forza 60, magari lo sono oggi, domani diventeranno 80, dopodomani 200. Ma a me interessa che prenda sempre 20 valori, sempre ordinati dal più piccolo al più grande e che l'ultimo sia sempre l'ultimo sul database, cioè, se ci sono 60 righe nel database i valori devono essere compresi fra 40 e 60, se ce ne sono 80 i valori devono essere compresi tra 60 e 80, se ce ne sono 200 devono essere compresi fra 180 e 200 e così, via. Però il numero di righe non è mai una costante.

    Mi sembra sia abbastanza chiaro.... comunque ti mostro esattamente come funziona il mio codice:

    $sql = "SELECT ID, DATO1, DATO2, DATON FROM TABELLA ORDER BY ID DESC LIMIT 20";
    $query = mysql_query ($sql, $connessione) or die(mysql_error());

    while ($row=mysql_fetch_array($query)){
    $ID=$row["ID"];
    $DATO1=$row["DATO1"];
    $DATO2=$row["DATO2"];
    $DATON=$row["DATON"];

    echo "$ID, $DATO1, $DATO2, $DATON";
    }


    Questo è il mio codice e funziona perfettamente, solo che i valori che compaiono a video sono ordinati in questa maniera (ponendo che nel databse ci siano 38 righe):

    38
    37
    36
    35
    ..ecc..
    19
    18

    io vorre che invece siano ordinati in questa maniera:

    18
    19
    ..ecc..
    35
    36
    37
    38

    Se la volta successiva che si effettua la query le righe del database dovessero essere diventate, diciamo, 42 allora voglio che mi scriva i valori compresi fra 22 e 42 sempre ordinati dal più piccolo al più grande, se dovessero esserci invece, 173 righe voglio che mi ordini, sempre nello stesso modo, i valori compresi fra 153 e 173 e così di seguito....

  6. #6
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Secondo me dovresti fare come ti ho detto io.
    Recuperi sempre gli ultimi 20 record, li metti in un array e scorri ques'utlimo al contrario in modo da averli ordinati in ordine crescente (visto che viene caricato al contrario).

    Roby

  7. #7
    Poiche' non sai qual'e' l'ultimo record, e ti serve un ordinamento ascendente a partire da -20 record prima dell'ultimo, l'ideale potrebbe essere fare una tabella provvisoria. Non pensare sia una grossa fatica elaborativa ... mysql ne fa continuamente per i fatti suoi...
    codice:
    CREATE TEMPORARY TABLE temp
    SELECT *
    FROM tabella
    ORDER BY id DESC
    LIMIT 20;
    
    SELECT * FROM temp
    ORDER BY id ASC;
    Se provi da php devi fare due query una a seguire l'altra. Se lo vuoi provare con phpmyadmin devi mettere entrambe le query nella stessa finestra di query separate da un punto e virgola


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.