Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    MySQL: query raggruppamento

    Ho questa tabella:
    Codice PHP:
    Luogo              Soggetto
    -------        ----------------
    Venezia      Ponte
    Venezia      Mercato
    Venezia      Canal Grande
    Udine           Ponte degli Alpini
    Roma              Ponte Milvio
    Roma              Colosseo 
    Vorrei estrarre tutti i Soggetti del Luogo per visualizzarli in una tabella in questo modo:

    Codice PHP:
    Luogo         Soggetto         Soggetto          Soggetto
    -------       ---------         ---------         ---------
    Venezia       Ponte             Mercato            Canal Grande 
    Se faccio un INNER JOIN mi restituisce anche Venezia ripetuto. Se faccio un GROUP BY su Luogo mi restituisce un solo record.
    Qualche aiuto?

    Al momento ho risolto facendo una prima SELECT DISTINCT sul Luogo e poi ho fatto un'ulteriore query di selezione di Soggetto con quel Luogo, ma non è certo una soluzione elegante.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    è una domanda interessante, in quanto, direi, vuoi ottenere una trasposta ma con un numero qualsiasi di righe (e quindi colonne).

    con un numero fisso non è un gran problema, con un numero variabile... non so... se trovo il tempo provo a pensarci

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    esatto!

  4. #4
    Prova ad usare group_concat().

    codice:
    select luogo, group_concat(soggetto)
    from tabella
    group by luogo
    http://dev.mysql.com/doc/refman/5.0/...n_group-concat

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Grande! E' proprio quella!
    Questo il risultato:

    Codice PHP:
    select luogogroup_concat(soggetto) AS nome
    from tabella
    group by luogo
    ...
    echo 
    $row['luogo']." ";
    $ok =  explode(','$row['nome']);
    foreach (
    $ok as $key => $val) {
        echo 
    $val."-";

    Ho dovuto aggiungere 'AS nome' perchè altrimenti non sapevo come recuperare i dati con $row (soggeto mi dava l'array vuoto).

    Comunque così funziona perfettamente!
    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Ti disturbo ancora per un consiglio:

    In un'altra tabella devo concatenare più di un campo. Una soluzione che funziona è questa:

    Codice PHP:
    $query "SELECT s.sequenza, group_concat(u.cognome) AS app_cognome, group_concat(u.nome) AS app_nome";
    $query .= " FROM ((crt_approvazioni AS a INNER JOIN crt_sequenze AS s ON s.id_sequenza = a.id_sequenza)";
    $query .= " INNER JOIN ana_utenti AS u ON a.id_utente = u.id_utente)";
    $query .= " GROUP BY s.sequenza"
    In pratica devo recuperare cognome e nome dalla tabelle degli utenti.
    Con la query sopra scorro poi il risultato prendendo un valore come chiave (che tanto è lo stesso).
    Codice PHP:
    for ($i=0$i sizeof($cognome); $i++) {
        echo 
    $cognome[$i]." ".$nome[$i]." - ";

    Credo che però sarebbe più corretto fare un group_concat di una select e vedendo in giro ho fatto così:

    Codice PHP:
    $query "SELECT s.sequenza, group_concat(SELECT u.cognome, u.nome FROM ana_utenti AS u INNER JOIN crt_approvazioni as a ON u.id_utente = a.id_utente) AS app_cognome";
    $query .= " FROM crt_approvazioni AS p INNER JOIN crt_sequenze AS s ON s.id_sequenza = p.id_sequenza";
    $query .= " GROUP BY s.sequenza"
    Ma continua a darmi errore...

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.