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

    MySql - creare una view da due colonne

    Salve,
    premetto di essere un neofita in fatto di comandi sql.
    Ho una tabella così composta
    ------------------------------------------------------------
    id | associato | pagamento anno | pagamento mese |
    ------------------------------------------------------------

    in questa tabella vengono memorizzati i vari pagamenti degli utenti
    Devo creare una view contenente, per ogni utente, l'ultimo pagamento effettuato (quello che ha l'anno e il mese più grande per intenderci)
    Ho provato questo codice:


    codice:
    SELECT pagamenti_utenti.associato, 
    	MAX(pagamenti_utenti.anno) AS MAX_anno, 
    	(pagamenti_utenti.mese) AS MAX_mese
    FROM pagamenti_utenti
    GROUP BY pagamenti_utenti.associato
    ORDER BY pagamenti_utenti.associato ASC, MAX_mese DESC, MAX_anno ASC
    ma il risultato che ottengo è una view con l'elenco dei pagamenti per associato con l'anno più grande ma NO con il mese più grande

    Ho provato questo codice (anche se sapevo che nn avrebbe funzionato)

    codice:
    SELECT pagamenti_utenti.associato, 
    	MAX(pagamenti_utenti.anno) AS MAX_anno, 
    	MAX(pagamenti_utenti.mese) AS MAX_mese
    FROM pagamenti_utenti
    GROUP BY pagamenti_utenti.associato
    ORDER BY pagamenti_utenti.associato ASC, MAX_mese DESC, MAX_anno ASC
    e il risultato è stato una view con una fusione non corretta tra massimo anno e massimo mese

    Qual'è il codice per poter creare la view di cui ho bisogno?
    Grazie

  2. #2
    Moderatore di Altri Server + Database L'avatar di SUPERMIKY
    Registrato dal
    Jun 2001
    Messaggi
    1,706
    Perchè parli di VIEW? Qui c'è in ballo una tabella sola...
    Tra l'altro mi verrebbe da consigliarti un campo unico per la data, in modo che tu possa facilmente risolvere con:

    codice:
    SELECT associato, MAX(data) AS ultimopagamento
    FROM pagamenti_utenti
    GROUP BY associato
    vCard | CV | Social networks
    No, in privato non ti aiuto.

  3. #3
    Si mi rendo conto che con un solo campo sarebbe tutto più semplice ma non posso cambiare perchè dovrei cambiare anche il modo di registrazione dei pagamenti. Questo avviene tramite ASP e si tratta di un sistema grafico: per ogni utente viene disegnata una griglia che rappresenta l'anno, l'utente fa click su una delle 12 caselle per registrare/eliminare un pagamento. Ovviamente all'atto della creazione della griglia/anno il sistema si legge i pagamenti memorizzati nel db per riportarli correttamente nella griglia stessa.

    Per quanto riguarda la view è il caso che faccia una ulteriore precisazione.
    Nell'anagrafica degli associati (altra tabella) voglio poter vedere i dati anagrafici più l'ultimo pagamento che ha effettuato l'utente.
    Pensavo quindi di creare una view che mi realizzasse una tabella virtuale con l'ultimo pagamento per ogni utente, successivamente creare una 2a view con una join tra la tabella dell'anagrafica e la view dei pagamenti.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select associato, 
    max(concat(anno,lpad(mese,2,0))) as maggiore 
    from pagamenti_utenti
    group by associato

  5. #5
    Grazie Nicola,
    una soluzione ottima. Ti faccio però una domanda a causa di un problema che mi si verifica quando vado a leggere i dati con asp.
    Ho fatto una view con una join tra i dati dell'anagrafica e i dati dei pagamenti e tutto è ok.
    questa view devo visualizzarla tramite una griglia in Ajax e purtroppo ricevo un errore. Dopo alcune prove sembrerebbe essere un problema della concatenazione delle due stringhe (anno e mese) che in realtà erano 2 interi. Se visualizzo i due dati (anno e mese) in due colonne distinti della griglia va tutto ok.
    Sto cercando di capire e risolvere qual'è il problema della griglia in asp.

    Cmq tramite sql non è possibile estrarre i dati lasciando i 2 campi separati?
    Grazie

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.