Visualizzazione dei risultati da 1 a 4 su 4

Discussione: ORDER by DATA asc

  1. #1

    ORDER by DATA asc

    Chiedo aiuto per la risoluzione di un problema.

    Possiedo una base dati nella quale uno dei campi denominato "DATA_CREAZIONE" è si tipo VARCHAR anzicchè DATE.
    I dati in esso inseriti sono nella forma gg/mm/YYYY.

    Purtroppo quando eseguo la query per estrapolare i record e voglio ordinare per data es:

    $sql = "select * from $tabella_table where status='".$var."' order by DATA_APPUNTAMENTO asc";

    mi estrapola i dati ma vengono posizionati nell'ordine seguente:

    31/08/2005
    31/07/2005
    30/08/2005

    ossia è come se ordinasse in base al valore intero.
    Può essere che questo dipenda dal fatto che il campo del db è di tipo varchar?

    Tenete presente che i dati mi arrivano da un file CSV e l'importazione avviene nel db con LOAD DATA INFILE quindi non saprei come normalizzare il campo data prima di inserirlo nel DB.

    Spero sia tutto chiaro

  2. #2
    ti vengono ordinati come fossero stringhe cioe' ordine ascii e non come data. D'altronde se capovolgi la data mettendo prima anno poi mese-giorno vedrai che' e' un ordinamento numerico dal piu' significativo al meno.

    Se hai mysql 4.1.x potresti usare STR_TO_DATE()

    str_to_date('gg/mm/yyyy', '%d/%m/%Y') ti rende:

    yyyy-mm-dd



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

  3. #3
    E' tutto chiarissimo e normalissimo. MySQL ordina i campi proprio come vanno ordinati: se analizzi le date vedi che effettivamente essi sono ordinati in ordine ascendente (dal più grande al più piccolo). 30 è più piccolo di 31 e quindi viene dopo.

    Per effettuare l'ordinazione come vuoi tu puoi fare due cose: normalizzare le date in timestamp oppure memorizzarle nel formato aaaa/mm/dd

    Per il problema della fonte non so proprio che dirti: l'unica cosa che so è che finchè terrai i dati in quel modo quello sarà l'unico ordine che potrai avere a meno che tu non decida di eseguire una miriade di operazioni dopo l'estrazione.

  4. #4

    Re: ORDER by DATA asc

    Originariamente inviato da Rolling
    Tenete presente che i dati mi arrivano da un file CSV e l'importazione avviene nel db con LOAD DATA INFILE quindi non saprei come normalizzare il campo data prima di inserirlo nel DB.
    Aggiungi una colonna in fondo alla tabella es.: data_1 che non disturbi gli inserimenti del load data infile.
    Poi,per esempio, potresti eseguire la seguente query:
    codice:
    // aggiungi colonna (una tantum)
    mysql_query("ALTER TABLE tabella ADD `data_1` DATE NOT NULL");
    
    // giri la data in formato yyyy-mm-dd dal campo importato che chiamo qui
    // data in frm dd/mm/yyyy ed un id.
    $query = "SELECT id, data from tabella";
    $res= mysql_query($query);
    
    while ($rows = mysql_fetch_assoc($res)) {
    
          list($giorno, $mese, $anno) = explode('/', $rows['data']);
          $new_data = $anno."-".$mese."-".$giorno;
          mysql_query("UPDATE tabella SET data_1 = '$new_data'
                       where id = '$rows[id]'";
    }
    ogni volta che importi un file CSV usi questo accrocchio.
    Poi la "data_1" la userai per ordinamenti e funzioni sulle date, e "data" per la stampa.

    E' una idea...


    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.