Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [MySQL] GROUP BY...ORDER...varchar(10)

    Salve,
    Ho una tabella il cui campo DATA1HELP contiene una data del tipo varchar(10)
    Praticamente la data che si trova nel database di MySQL è scritta ad esempio : 31/12/2005
    Con la seguente query riesco ad estrarre dei raggruppamenti e contenenti dei valori, cioè valori uguali e diversi da zero/vuoti.
    $sql = 'SELECT hunde3.DATA1HELP FROM hunde3 WHERE hunde3.data1help!=" " GROUP BY data1help';
    Il mio problema è ora di sistemarli in ordine di anno,mese e giorno
    partendo ad esempio dal 19/10/1975 per arrivare al 31/12/2005
    Come dovrei operare nella query per avere i valori in ordine crescente visto che
    il campo su cui dovrei intervenire è varchar(10) e non è date ?
    Chiedo aiuto
    Bruno

  2. #2
    Ho dimenticato di dire che nel server c'è la versione MySQL 3.23.51-nt

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova ad aggiungere un campo di tipo date alla tua tabella e rappresentare le date nel formato corretto.
    http://forum.html.it/forum/showthrea...highlight=data

    edit: se non vuoi/puoi aggiungere il campo puoi sempre usare concat_ws solo per rappresentare le date nel formato yyyy-mm-gg e ordinarle così

    select i_vari_campi,
    CONCAT_WS('-', SUBSTRING(datatesto,7,4), SUBSTRING(datatesto,4,2), SUBSTRING(datatesto,1,2)) as
    data_inglese
    from tabella order by data_inglese;

    anche se sarebbe meglio usare il tipo di campo corretto.

  4. #4
    Originariamente inviato da nicola75ss
    Prova ad aggiungere un campo di tipo date alla tua tabella e rappresentare le date nel formato corretto.
    http://forum.html.it/forum/showthrea...highlight=data

    edit: se non vuoi/puoi aggiungere il campo puoi sempre usare concat_ws solo per rappresentare le date nel formato yyyy-mm-gg e ordinarle così

    select i_vari_campi,
    CONCAT_WS('-', SUBSTRING(datatesto,7,4), SUBSTRING(datatesto,4,2), SUBSTRING(datatesto,1,2)) as
    data_inglese
    from tabella order by data_inglese;

    anche se sarebbe meglio usare il tipo di campo corretto.
    Fino a qua tutto OK nel server dove ho usato la seguente query :
    SELECT hunde4a.SCH3DJAHEL,CONCAT_WS('-',SUBSTRING(SCH3DJAHEL,7,4),SUBSTRING(SCH3DJAHEL,4 ,2),SUBSTRING(SCH3DJAHEL,1,2)) as data_inglese FROM hunde4a WHERE hunde4a.sch3djahel!=" " GROUP BY sch3djahel ORDER BY data_inglese

    Nel database del server vengono elencati i valori in due colonne
    La prima contiene i dati del campo 'sch3djahel' come per esempio 31/12/2005 ed altri valori differenti
    La seconda contiene i dati di 'data_inglese ' che trasformati sono 2005-12-31 ed altri valori differenti
    Dovendo ora farli vedere in una pagina in linea ed in ordine di anno (ORDER BY data_inglese)
    ho usato nel file php quanto segue, ma non vedo il risultato.
    Dove sbaglio visto che il collegamento al server è giusto
    e la pagina si vede senza i dati nel comando <option value=... ?


    echo "<div align=\"center\">\n";
    echo " <table width=\"100%\" border=\"0\" bgcolor=\"#808080\" cellspacing=\"0\" cellpadding=\"0\" height=\"1\">\n";

    echo " <form method=post action=ricercfreeplus.php>\n";
    echo " <tr>\n";
    echo " <td align=\"center\" bgcolor=\"#FFCC33\" height=\"54\" width=\"48%\">\n";

    $sql = 'SELECT hunde4a.SCH3DJAHEL,CONCAT_WS('-',SUBSTRING(SCH3DJAHEL,7,4),SUBSTRING(SCH3DJAHEL,4 ,2),SUBSTRING(SCH3DJAHEL,1,2)) as data_inglese FROM hunde4a WHERE hunde4a.sch3djahel!=" " GROUP BY sch3djahel ORDER BY data_inglese';
    // print $sql;
    $result = mysql_query($sql , $global_db);
    $nresult=0;
    while ($ris = mysql_fetch_array($result)) {
    $res[$nresult]["SCH3DJAHEL "] = $ris["SCH3DJAHEL "];
    if ($res[$nresult]["SCH3DJAHEL "]) {
    $nresult++;
    }
    }
    //print "////".$nresult;
    for ($i=0; $i<$nresult; $i++) {
    // print $i."///";
    echo " <option value=... ".$res[$i]["SCH3DJAHEL"].">".$res[$i]["SCH3DJAHEL"]."</option>\n";
    }
    echo " </select>\n";

    echo " </form>\n";
    echo " </center>\n";
    echo " </table>\n";
    echo "</div>\n";

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Guarda, come ti ho detto sarebbe preferibile che facessi un aggiornamento della tabella inserendo
    il campo date e memorizzando le date nel formato corretto altrimenti è molto probabile che l'ordinamento dia risultati "strani".

  6. #6
    Mi stai dicendo quindi che non c'è modo di far vedere nelle <option value=... 1 il dato
    che nel server si vede come data_inglese ed odinato per anno cioè SUBSTRING(SCH3DJAHEL,7,4) ?
    Non potrei quindi ordinarlo direttamente con la substringa stessa senza passare per data_inglese ?
    Adesso provo perchè purtroppo ho dovuto importare i dati nel database MySQL con l'ODBC da un file mdb di Microsoft Access dove le date dopo l'anno 2001 ed importate a loro volta da un Db3 o DbIV vengono trasformate in date antecenti l'anno 2000 e quindi una data che ha come hanno il 2000 diventa 1900 come pure la data 2001 diventa 1901.
    Non sono riuscito a trovare fino ad ora il bandolo della matassa per intervenire primo a dopo delle varie importazioni.
    Ecco perchè sto usando nella tabella un campo dal nome SCH3DJAHEL di varchar(10).
    Se hai altri suggerimenti li aspetto prima di dover intervenire su strutture e programmi testati e ritestati negli anni.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Scusa, ma hai letto il link che ti ho postato? Il problema era identico al tuo, cioè dover aggiungere 100 anni a determinate date. Una volta che le hai aggiornate ti crei il campo di tipo date, le converti in tale formato e il problema è risolto.
    ciao.

  8. #8
    Ho trovato la soluzione dopo la prova che ho fatto come accennato in precedenza.
    ho inserito la nuova query ed i valori si vedono nella <option value=... e sono ordinati per anno.
    Questa la nuova query funzionante che cerca tutte le date contenenti dei valori,
    valori ordinati per ora in modo crescente con riferimento all'anno dal 1900 in poi,
    ma non ordinati per mese e giorno:

    SELECT hunde4a.SCH3DJAHEL FROM hunde4a WHERE hunde4a.sch3djahel!=" " GROUP BY SUBSTRING(sch3djahel,7,4) ORDER BY SUBSTRING(sch3djahel,7,4)

  9. #9
    Non avevo letto il link da te postato adesso lo vado a vedere
    Grazie

  10. #10
    Dovrei aver sistemato anche l'ordinamento per anno e mese usando la seguente query :

    $sql = 'SELECT hunde4a.SCH3DJAHEL,hunde4a.NAZIONE FROM hunde4a WHERE hunde4a.sch3djahel!=" " GROUP BY SUBSTRING(sch3djahel,7,4) ORDER BY SUBSTRING(sch3djahel,7,4),SUBSTRING(sch3djahel,4,2 )';

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.