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

    [MySQL] Query con conteggio

    Mi sto bloccando su una query...chi mi aiuta?
    Dovrebbe essere semplice.

    Ho una tabella:
    TABLE transazione (
    idtransazione INT auto_increment,
    data_transazione TIMESTAMP,
    ...,
    );


    quello che voglio fare è ottenere l'elenco degli ANNI di data_transazione [ YEAR(data_transazione) ] e fare in modo xò che venga aggiunta una nuova colonna (nel mio risultato) che costituisca per me un indice crescente da 1 a N.

    Es.
    ID TR. ----- DATA_TR.
    00001 ----- 2006-12-12
    00002 ----- 2007-04-13
    00003 ----- 2006-01-23
    00004 ----- 2008-01-01

    vorrei che il mio risultato fosse del tipo:

    INDICE ----- ANNO
    00001 ----- 2008
    00002 ----- 2007
    00003 ----- 2006

    ovvero gli anni (distinti) ordinati in maniera decrescente ed vicino quella colonna indice...

    è proprio la generazione di quella colonna tramite query che mi sta esaurendo...
    Administrator of NAMDesign.Net

  2. #2

  3. #3
    eh so che sarebbe stato più semplice ma preferirei questa strada xkè:

    1) Nella mia classe template ho la possibilità di passare un array (associativo) e lei mi valorizza direttamente dei campi in un tag particolare (<loop>) che faccio riconoscere tramite reg_exp

    2) Nella classe database ho implementato un metodo che invece di restituirmi i risultati riga per riga me li restituisce sotto forma di array (il tipo di array che viene gestito dal mio template)

    quindi unendo le due cose se riesco a farlo tramite query risparmio un po di codice.

    faccio un esempio, ma fate finta che PHP ed HTML stiano in due file separati:


    codice:
    <?PHP
    
       $query = $db->query("...");
       $result = $db->fetch_array($query);
       $template->replace('loop_uno', $result);
    
    ?>
    
    
    <html>
      <body>
        <loop id="loop_uno">
             <div>{indice}, {anno}<div>
        </loop>
      </body>
    </html>
    automaticamente se la mia query mi restituisce in output la tabella del post precedente otterrei:

    <div>1, 2008</div>
    <div>2, 2007</div>
    <div>3, 2006</div>
    questo mi risparmia molte rogne e molto codice sia PHP che HTML
    Administrator of NAMDesign.Net

  4. #4
    Nella mia classe template ho la possibilità di passare un array (associativo) e lei mi valorizza direttamente dei campi in un tag particolare (<loop> ) che faccio riconoscere tramite reg_exp
    E allora? In PHP crei l'array associativo in base al recordset restituito da MySQL e contenente l'elenco univoco degli anni.

    2) Nella classe database ho implementato un metodo che invece di restituirmi i risultati riga per riga me li restituisce sotto forma di array (il tipo di array che viene gestito dal mio template)
    Se passi alla tua classe questa query, che cosa ti restituisce?

    Codice PHP:
    SELECT DISTINCT YEAR(data_transazioneFROM transazione 

  5. #5
    Mi restituisce l'elenco degli anni (2008, 2007, 2006).

    Quindi mi consigli di farmi dare semplicemente l'elenco degli anni e poi crearmi tramite PHP l'array che mi interessa?

    Effettivamente sarebbe più semplice, ma per farlo direttamente in SQL non c'è un modo? ormai è giusto la curiosità...
    Administrator of NAMDesign.Net

  6. #6
    In PHP OGNI array è un array associativo. Se esegui un print_r() dell'array ti accorgerai di che cosa intendo.

  7. #7
    Originariamente inviato da filippo.toso
    In PHP OGNI array è un array associativo. Se esegui un print_r() dell'array ti accorgerai di che cosa intendo.
    Si si, è che in realtà ho usato il termine "associativo" dove non c'entrava.
    Administrator of NAMDesign.Net

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    set @num=0;
    select distinct @num := @num + 1 as riga_numero, year(campo) as anno
    from tabella
    order by anno desc
    se vuoi gli zeri iniziali usa la funziona lpad.

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.