Visualizzazione risultati 1 fino 10 di 10

Discussione: ORDER BY data (dove il mese deve essere numerico)

  1. #1
    Guest

    Unhappy ORDER BY data (dove il mese deve essere numerico)

    Salve a tutti :)

    Devo interagire con un db in cui i campi sono data, mese e anno.
    Il mese è alfabetico ma io devo ordinare la select cronologicamente, quindi il campo mese deve avere necessariamente i mesi (Gennaio, Febbraio..) in formato numerico (01,02..)

    Ho provato a fare un array per trasformarli in numeri e funziona ma poi non so come collegare le due cose!

    Questa è la select per i mesi che trasforma i mesi in numero:
    Codice PHP:
    $trova_mesi= "SELECT * FROM Modulo_DataDyn_Entita_2";
    $result = mysql_query($trova_mesi);
    $num_righe = mysql_num_rows($result);
    if (
    $num_righe<1){ echo "<i>no info</i><br />"; }
    else{
    while (
    $riga = mysql_fetch_assoc($result)) {
    $mese=$riga["Field30"];
    $data=$riga["Field31"];
    $anno=$riga["Field32"];
    $arr_mesi = array('Gennaio' => '01', 'Febbraio' => '02',
    'Marzo' => '03', 'Aprile' => '04',
    'Maggio' => '05', 'Giugno' => '06',
    'Luglio' => '07', 'Agosto' => '08',
    'Settembre' => '09', 'Ottobre' => '10',
    'Novembre' => '11', 'Dicembre' => '12');
    $num_mese = $arr_mesi[$mese];


    echo
    "$giorno $data $num_mese<br />";
    ...ma io devo ordinare per data la query che mi scrive le aperture (si tratta di aperture di un locale)
    Codice PHP:
    $aperture_straordinarie= "SELECT * FROM Modulo_DataDyn_Entita_2
    WHERE Field29 = 'Domenica'"
    ;
    $result = mysql_query( $aperture_straordinarie);
    $num_righe = mysql_num_rows($result);
    if (
    $num_righe<1){ echo "<i>aperture straordinarie non previste</i><br />"; }
    else{
    while (
    $riga = mysql_fetch_assoc($result)) {
    $giorno=$riga["Field29"];
    $mese=$riga["Field30"];
    $data=$riga["Field31"]; //data intesa come numero del giorno
    $anno=$riga["Field32"];
    $dalle=$riga["Field33"];
    $alle=$riga["Field34"];

    echo
    "<div class=\"data\">$giorno $data $mese</div>
    <div class=\"ora\">dalle ore
    $dalle:00 alle ore $alle:00</div>
    <br style=\"clear:both\" />"
    ;
    }
    //while
    } // else
    Come posso fare per ordinare la select $aperture_straordinarie per data (creata da anno, mese, data)?

    So di dover inserire un ORDER BY ma non riesco a capire come legare insieme il numero del mese alla selezione ordinata..

    Grazie :)

  2. #2
    Guest

    Predefinito

    Se i mesi sono memorizzati con il loro nome, devi per forza modificare i record per identificarli numericamente.

    PS: anzichè data io lo chiamerei giorni, data (solo in italiano) si intende la stringa giorno_mese_anno nelle varie combinazioni.


    Ciao!

  3. #3
    Guest

    Predefinito

    Ciao debug!
    Purtroppo non posso toccare i record della tabella perchè la visualizzazione dei mesi in lettere serve per l'inserimento delle notizie tramite cms ad altre persone e mi è permesso solo modificare l'estrazione dei dati...

  4. #4
    Guest

    Predefinito

    Scusa, mi fai un esempio di un record memorizzato?


    Ciao!

  5. #5
    incuso non è connesso Utente
    Data registrazione
    27-09-2003
    Messaggi
    173

    Predefinito

    Creati una seconda tabella (pippo) che contiene solo due campi: mese numerico, mese alfabetico.

    A questo punto fai una select del tipo

    select xyz from primatabella,pippo where ... and primatabella.mese=pippo.mese order by pippo.numerico

  6. #6
    Guest

    Predefinito

    incuso, sbagliato, prima di tutto perchè dovrebbe fare una join tra le due tabelle, e poi non c'è bisogno di creare una seconda tabella (ammesso che lui possa) visto che le accoppiate mesi alfabetici => mesi numerici è conosciuta.
    A questo proposito sarebbe utile un semplice array (ed era il suggerimento che volevo fare in seguito).


    ciao!

  7. #7
    incuso non è connesso Utente
    Data registrazione
    27-09-2003
    Messaggi
    173

    Predefinito

    Se la cosa va fatta in sql penso che l'unica sia fare come dico io. È vero che è una join, ma la tabella pippo avrà 12 record e, in effetti non l'ho detto, il campo mese andra' messo come index di pippo.

    Insomma non è che le join sono vietate (peraltro questa è una inner join)...

    Si puo' fare ovviamente anche in PHP una volta acquisiti i dati, ma sono pronto a scommettere che sara' piu' lento.

    L'alternativa piú efficiente potrebbe essere l'aggiungere un campo numerico nella prima tabella di modo che contenga sia valore numerico e stringa del mese. Però è ovvio che questo va tenuto consistente. Dato che aborro la ridondanza opterei per la join.

    Purtroppo una decisione "ottima" va presa anche considerando condizioni al contorno che non abbiamo, come, ad esempio: frequenza aggiornamento DB, dimensioni tabelle etc. etc.
    Ultima modifica di incuso : 11-05-2009 alle ore 11.49.40

  8. #8
    Guest

    Predefinito

    Allora....
    non sapevo se potevo agire sul db (altre persone devono gestirlo) invece mi hanno detto che l'importante era visualizzare i mesi in lettere solo nella visualizzazione su pagina web.
    Quindi ho deciso di semplificarmi la vita e ho risolto in un altro modo, mettendo i mesi in numero nel db e poi associando il numero al nome del mese tramite array:

    $arr_mesi = array( '1' => 'Gennaio', '2' => 'Febbraio', '3' => 'Marzo',
    '4' => 'Aprile', '5' => 'Maggio', '6' => 'Giugno', '7' => 'Luglio',
    '8' => 'Agosto', '9' => 'Settembre', '10' => 'Ottobre',
    '11' => 'Novembre', '12' => 'Dicembre');

    $aperture_straordinarie= "SELECT * FROM Modulo_DataDyn_Entita_2
    WHERE Field29 = 'Domenica' ORDER BY Field32,Field30,Field31"; //aaaa - mm - gg

    impostando: $mese=$riga["Field30"];
    e poi.. $mm = $arr_mesi[$mese];

    così dovrebbe andare meglio, no?
    Grazie dell'attenzione!
    Velocissimi nel rispondermi!!

  9. #9
    incuso non è connesso Utente
    Data registrazione
    27-09-2003
    Messaggi
    173

    Predefinito

    Sì, così è molto meglio

    Un unico appunto, in italiano i nomi dei mesi vanno minuscoli
    Ultima modifica di incuso : 11-05-2009 alle ore 12.33.09

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da incuso Visualizza messaggio
    Un unico appunto, in italiano i nomi dei mesi vanno minuscoli
    Eheh..si..hai ragione... :)
    Su quello però non posso decidere io........

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •