Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    [MySql] Group_concat ma in colonne

    Scusate il titolo equivoco.
    Ora mi spiego per benino.

    Tabella impiegati
    codice:
    id cognome posizione
    1  Rossi      Commesso
    2  Bianchi   Amministrativo
    3  Verdi      Commesso
    4  Gialli       Magazziniere
    5  Rossini    Amministrativo
    6  Giallini     Capo Reparto
    7  Verdini    Commesso
    Ciò che vorrei ottenere dalla mia query
    codice:
    Amm.vo  Capo Reparto               Commesso Magazziniere
    Bianchi    Giallini              Rossi       Gialli
    Rossini                          Verdi
                                       Verdini
    Non venendo a capo della query ho rigirato il tutto in php...

    Codice PHP:
    $query mysql_query("select posizione,group_concat(cognome order by cognome separator ',') as nominativi
                          from impiegati
                          group by posizione
                          order by posizione asc"
    ) or die(mysql_error() );

    $array = array();
    while (
    $row mysql_fetch_assoc($query) )
    $array[$row['posizione']] = $row['nominativi'];

    $occorrenze = array();
    foreach(
    $array as $nomi)
    $occorrenze[] = substr_count($nomi,',') == substr_count($nomi,',') + 1;
    $str '<table>';
    $str.= '<thead>';
    foreach(
    array_keys($array) as $posiz)
        
    $str.= "<th>$posiz</th>";
    $str.= '</thead>';
    $str.= '<tbody>';
    for (
    $i 0$max max($occorrenze); $i $max$i++) {
        
    $str.= '<tr>';
        foreach(
    $array as $key => $nomi) {
            
    $array_nomi explode(',',$nomi);
            
    $str.= isset($array_nomi[$i]) ? '<td>'.$array_nomi[$i].'</td>' '<td></td>'
        }
    $str.= '</tr>';
    }
    $str.= '</tbody>';
    $str.= '</table>';

    echo 
    $str
    ...ma sarei curioso di sapere se è possibile ottenere un risultato simile tramite sql?
    Spero che qualcuno abbia già affrontato un problema simile perchè è da stamattina che
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Un resultset logicamente è una tabella.
    Quello che vuoi ottenere tu non mi sembra una tabella...

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da luca200
    Un resultset logicamente è una tabella.
    Quello che vuoi ottenere tu non mi sembra una tabella...
    Scusami Luca ma non ho capito.

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: [MySql] Group_concat ma in colonne

    Originariamente inviato da nicola75ss
    codice:
    Amm.vo  Capo Reparto               Commesso Magazziniere
    Bianchi    Giallini              Rossi       Gialli
    Rossini                          Verdi
                                       Verdini
    Io qui vedo una colonna con due valori, una con uno, una con tre e una quarta con uno.
    Questa NON è una tabella.
    Una tabella è composta da righe in cui i valori sono correlati tra loro, e per ogni colonna la riga contiene un valore (eventualmente NULL).

    Secondo me quello che tu vuoi ottenere non risponde a queste caratteristiche. Quindi non puoi ottenerlo con una query

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    Re: Re: [MySql] Group_concat ma in colonne

    Originariamente inviato da luca200
    Io qui vedo una colonna con due valori, una con uno, una con tre e una quarta con uno.
    Questa NON è una tabella.
    Una tabella è composta da righe in cui i valori sono correlati tra loro, e per ogni colonna la riga contiene un valore (eventualmente NULL).

    Secondo me quello che tu vuoi ottenere non risponde a queste caratteristiche. Quindi non puoi ottenerlo con una query
    Ora sei stato chiaro
    Pensavo che magari giocando col case e qualche subquery fosse possibile ottenere i dati in quella forma. Purtroppo non è un mio capriccio ma mi servono proprio così.
    Vorrà dire che terrò la soluzione fatta in php.

    Ti ringrazio.

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Dopo lungo peregrinare son riuscito a trovare la query che mi serviva. Non è che l'abbia capita
    tutta ma funziona a meraviglia.
    Sull'esempio che ho postato sarebbe così.

    codice:
    select max(case when posizione='Amministrativo'
               then cognome else '' end) as Amministativi,
           max(case when posizione='Capo Reparto'
               then cognome else '' end) as Capi_Reparto,
           max(case when posizione='Commesso'
               then cognome else '' end) as Commessi,
           max(case when posizione='Magazziniere'
               then cognome else '' end) as Magazzinieri
    from (
      select e.posizione,
             e.cognome,
             (select count(*) from impiegati d
               where e.posizione=d.posizione and e.id < d.id) as rnk
        from impiegati e
             ) x 
       group by rnk
    Edit. Ho ancora un problemino.
    Non riesco a ottenere i risultati ordinati per cognome. Ovunque metta l'order o mi restituisce errore oppure se ne infischia.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

  8. #8
    Come gia' ti ha giustamente osservato Luca, quello che vuoi fare tu e' una "impaginazione di dati" e non una tabella referenziale come invece e' logico sia un database.

    Non c'e' alcun senso referenziale nella tabella che vuoi costruire. Estrai i dati e impaginali con il php come gia' mi pare avevi risolto.

    ____________________________


    (IMHO) - tra parentesi ... non capisco quando si vuole ottenere tutto con una query costringendo il server a "costruire" svariate tabelle temporanee o alluppamento di scansioni sui dati quando si puo' ottenere lo stesso risultato con due o tre queries molto semplici.... Se si ha paura di fare una query in piu' non usate il database ma altri mezzi. Phpmyadmin (ma anche gli altri tools) solo per far vedere la pagina iniziale, di queries ne fa una ventina e un centinaio per visualizzare la videata iniziale di un database con una decina di tabelle..... fate voi....

    Verificabile con "visualizza informazioni di runtime"

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da piero.mac
    Come gia' ti ha giustamente osservato Luca, quello che vuoi fare tu e' una "impaginazione di dati" e non una tabella referenziale come invece e' logico sia un database.

    Non c'e' alcun senso referenziale nella tabella che vuoi costruire. Estrai i dati e impaginali con il php come gia' mi pare avevi risolto.

    ____________________________


    (IMHO) - tra parentesi ... non capisco quando si vuole ottenere tutto con una query costringendo il server a "costruire" svariate tabelle temporanee o alluppamento di scansioni sui dati quando si puo' ottenere lo stesso risultato con due o tre queries molto semplici.... Se si ha paura di fare una query in piu' non usate il database ma altri mezzi. Phpmyadmin (ma anche gli altri tools) solo per far vedere la pagina iniziale, di queries ne fa una ventina e un centinaio per visualizzare la videata iniziale di un database con una decina di tabelle..... fate voi....

    Verificabile con "visualizza informazioni di runtime"
    Ok! Mi avete definitivamente convinto. In effetti visto il casino della query immagino risulti più snella la cosa in php, ottengo i dati ordinati come voglio io e so cosa sto facendo a differenza della query.

    Grazie Piero per l'interessamento.

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.