Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    75

    Ordinare array in base alla data

    Salve, ho un problema con l'ordinamento di un array. In pratica io tramite due query estraggo dati da un database mysql da due tabelle diverse, poi unisco i risultati in un unico array tamite il metodo array_merge. Il tutto funziona correttamente, tranne per un problema di ordinamento, in pratica nelle due tabelle è presente un campo data dove viene inserita la data in questo formato 2015-05-25, io vorrei che i dati estratti siano visualizzato in modo discendete, ma ciò non accade. Ecco il codice che utilizzo:

    Codice PHP:
    <?php                        $sql "SELECT * FROM tabella1 WHERE data between '$primo_parametro' and '$secondo_parametro' and id_utente = '$ute'";        $res mysql_query($sql);
            
    $data = array();
            while (
    $rows mysql_fetch_array($resMYSQL_ASSOC)) {            $data[] = $rows;        }        /* Query Quando selezioni due date */
            
    $sql2 "SELECT * FROM tabella2 WHERE data_ass between '$primo_parametro' and '$secondo_parametro' and id_utente = '$ute'";        $res2 mysql_query($sql2);
            
    $data2 = array();
            while (
    $rows2 mysql_fetch_array($res2MYSQL_ASSOC)) {            $data2[] = $rows2;        }

            
    //echo json_encode($data,$data2);        //echo json_encode($data2);
            
    $combinedData array_merge($data,$data2);

            function 
    cmp($a$b)        {            return $b['data'] - $a['data_ass'];        }
            
    usort($combinedData"cmp");

            
    $json json_encode($combinedData);        echo $json;
    ?>
    Ho letto in giro che bisogna utilizzare la funzione usort, ma non ho capito come e possibile applicarla al mio problema.

    Potete darmi una mano?

  2. #2
    Secondo me puoi fare tutto con un'unica query ed un semplice order by
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    75
    Puoi farmi un esempio? io ci ho provato ma non funziona. Le due tabelle hanno in comune uno solo campo e sarebbe id_utente, tutto il resto è diverso.

  4. #4
    Non sono ferratissimo in SQL, ma considerando le seguenti tabelle di esempio (che rispecchiano la tua situazione):

    tabella1: id_utente, data1, colonna1
    tabella2: id_utente, data2, colonna2

    Puoi prendere spunto da questa query:

    codice:
    (SELECT id_utente, data1 AS data, data1, colonna1, '' AS data2, '' AS colonna2 
    FROM tabella1 
    WHERE id_utente = 1) 
    
    UNION 
    
    (SELECT id_utente, data2 AS data, '' AS data1, '' AS colonna1, data2, colonna2 
    FROM tabella2 
    WHERE id_utente = 1) 
    
    ORDER BY data DESC;

    Ovviamente puoi adattare questo esempio a qualsiasi numero di campi.

    P.S.
    Magari nella sezione database potranno fornirti una query più performante.
    Ultima modifica di satifal; 25-05-2015 a 17:57
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    75
    Ho gia posto la domanda in database, ma ancora non siamo riusciti a trovare una soluzione, in quanto il database che utilizzo non permette di fare union se le due tabelle non hanno gli stessi campi.

  6. #6
    Quote Originariamente inviata da bivio_08 Visualizza il messaggio
    Ho gia posto la domanda in database, ma ancora non siamo riusciti a trovare una soluzione, in quanto il database che utilizzo non permette di fare union se le due tabelle non hanno gli stessi campi.
    Beh, nessun database permette di fare union con colonne differenti è per questo che ti ho postato la query funzionante da adattare al tuo caso...magari a degnarsi di studiarsela!!!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    75
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Beh, nessun database permette di fare union con colonne differenti è per questo che ti ho postato la query funzionante da adattare al tuo caso...magari a degnarsi di studiarsela!!!
    Infatti la sto studiando, cercando di adattarla al mio scopo. Avevo solo risposto alla seconda affermazione

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    75
    Alla fine ho risolto con la funzione sort, prendendo spunto da un esempio in rete. Posto i passaggi magari può essere utile a qualcuno altro.

    Partendo dal codice che avevo postato nel primo messaggio, ho modificato la seconda query cosi:

    Codice PHP:
     $sql2 "SELECT *,data_ass AS data FROM tabella2 WHERE data_ass between '$primo_parametro' and '$secondo_parametro' and id_utente = '$ute'"
    E ho modificato la funzione
    Codice PHP:
            function cmp($a$b){            return $b['data'] > $a['data'];        } 
    Non se sia la soluzione migliore, ma per il momento ottengo quello che mi serviva.

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.