+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: MySQL: variabile troncata per lunghezza?

  1. #1
    L'avatar di grimreaper
    grimreaper non è in linea Scolaretto
    Luogo
    Treviso
    Post
    446

    MySQL: variabile troncata per lunghezza?

    Buongiorno a tutti,
    vi premetto che ho posto questa domanda anche in un gruppo FB senza ricevere risposta, forse perché troppo idiota.

    Sto facendo una tabella pivot. Utilizzo una variabile @sql per costruire la lista dei campi dinamici (banalmente una combinazione di anni e trimestri dal 2009 al 2015). Eseguo la query ma pare che ad un certo punto la variabile venga troncata.
    Ho provato a cercare qual è il limite delle variabili definite dall'utente ma purtroppo non ho trovato niente.
    Le domanda sono: sbaglio qualcosa? O come faccio ad aggirare questo limite?
    Grazie,

    codice:
    SET @sql = NULL;
    SELECT GROUP_CONCAT(DISTINCT CONCAT('SUM(anno=''',anno,'''and periodo=''', periodo ,''')AS', anno,'_',periodo)) INTO @sql FROM tabella;
    
    SET @sql = CONCAT('SELECT provincia, ', @sql, ' FROM tabella GROUP BY provincia');
    select @sql;
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    - GRiM[R]eaPeR -

    PS: L'avatar è tutta scena.

  2. #2
    L'avatar di +m+
    +m+
    +m+ non è in linea Scribacchino
    Post
    922
    il pacchettone è il primo limite (rif group concat)
    max_allowed_packet
    di solito 16MB

  3. #3
    L'avatar di grimreaper
    grimreaper non è in linea Scolaretto
    Luogo
    Treviso
    Post
    446
    Ciao +m+,
    Grazie per la risposta.
    L'installazione è su XAMPP su Windows.
    max_allowed_packet era impostato a 1M. Alzato a 256M (e verificato con
    codice:
    show variables like 'max_allowed_packet';
    ) ma il problema persiste. Chiaramente ho riavviato il servizio dopo la modifica.
    Il file modificato è C:\XAMPP\mysql\bin\my.ini .

    Grazie,
    - GRiM[R]eaPeR -

    PS: L'avatar è tutta scena.

  4. #4
    L'avatar di +m+
    +m+
    +m+ non è in linea Scribacchino
    Post
    922
    Francamente non mi è chiarissimo quale sia il problema, nè perchè vuoi fare uno statement (su mysql non si "usa", è roba tipicamente microsoft)

  5. #5
    L'avatar di grimreaper
    grimreaper non è in linea Scolaretto
    Luogo
    Treviso
    Post
    446
    Ciao +m+,
    grazie per la risposta. Allora cosa posso usare per avere una tabella con i valori separati per anno e trimestre che trovo nella tabella stessa?

    Grazie,
    - GRiM[R]eaPeR -

    PS: L'avatar è tutta scena.

  6. #6
    Luogo
    Lazio
    Post
    1,540
    Blogs
    16
    Quote Originariamente inviato da grimreaper Visualizza il messaggio
    Buongiorno a tutti,
    codice:
    SET @sql = NULL;
    ...
    ... per la serie "anche se sarà una stupidata .... tentar non nuoce".

    SET @sql = '';
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  7. #7
    L'avatar di grimreaper
    grimreaper non è in linea Scolaretto
    Luogo
    Treviso
    Post
    446
    Ciao Sspintux,
    la tua soluzione non ha sortito effetti purtroppo.
    In compenso ho capito che la variabile da cambiare era group_concat_max_len .

    Ora funziona alla grande.

    Rimango in attesa della soluzione alternativa allo statement.

    Grazie per il supporto.

    Buona giornata.
    - GRiM[R]eaPeR -

    PS: L'avatar è tutta scena.

  8. #8
    L'avatar di +m+
    +m+
    +m+ non è in linea Scribacchino
    Post
    922
    Quote Originariamente inviato da grimreaper Visualizza il messaggio
    Ciao +m+,
    grazie per la risposta. Allora cosa posso usare per avere una tabella con i valori separati per anno e trimestre che trovo nella tabella stessa?

    Grazie,
    Francamente non è che sia proprio chiaro quale sia la cosa che vuoi fare.
    Posta un po' di dati di esempio e il risultato che vuoi (o meglio ancora carica un dump del db, così perdo meno tempo).
    In generale nulla ti vieta di fare group by per YEAR o MONTH o frazioni

  9. #9
    L'avatar di grimreaper
    grimreaper non è in linea Scolaretto
    Luogo
    Treviso
    Post
    446
    Ciao +m+,

    Il GROUP BY suddividerebbe i valori in record tipo:

    codice:
    Provincia  | Anno | Periodo | Conteggio
    -----------------------------------------
    Avellino   | 2015 |       1 |      232  
    Avellino   | 2015 |       2 |      343  
    Avellino   | 2015 |       3 |      545 
    Benevento  | 2015 |       1 |      656 
    Benevento  | 2015 |       2 |      767 
    Benevento  | 2015 |       3 |      454 
    Caserta    | 2015 |       1 |      343  
    Caserta    | 2015 |       3 |      444 
    Napoli     | 2015 |       1 |      222 
    Napoli     | 2015 |       2 |      777 
    Napoli     | 2015 |       3 |      333 
    Salerno    | 2015 |       1 |      333 
    Salerno    | 2015 |       2 |      333 
    Salerno    | 2015 |       3 |      332
    quello che vorrei io è creare dinamicamente una query suddivida i conteggi in colonne come per esempio:
    codice:
    Provincia  | 2015_1 | 2015_2 | 2015_3
    ---------------------------------------
    Avellino   |    232 |    434 |    434 
    Benevento  |    343 |    545 |    333 
    Caserta    |    545 |    676 |     55
    Napoli     |    666 |    878 |    666
    Salerno    |    343 |    565 |    222
    e quando dico dinamica intendo che vorrei non dover modificare la query negli anni e con l'inserimento dei nuovi dati.
    Quindi la soluzione che avevo trovato era costruire con group concat i campi relativi agli anni.

    Grazie,

    ciao
    - GRiM[R]eaPeR -

    PS: L'avatar è tutta scena.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi