• User

    Raggruppamento di record in categorie con GROUP BY

    Buongiorno avrei bisogno di aiuto per effettuare una query di raggruppamento delle noizie presenti nel mio sito.

    Ho una tabella news di cui riporto le colonne interessate:
    id, titolo, categoria, data

    Le news sono suddivise in 4 categorie e assegno una determinata categoria con i numeri da 1 a 4.

    esempio:
    id:1
    titolo: news1
    categoria: 2
    data: timestamp

    Il risultato che vorrei ottenere è la suddivisione in colonne (categorie) delle ultime news (le ultime dieci per esempio), così:
    Cat1
    news4
    news3
    news2
    news1

    Cat2
    news2
    news1

    Cat3
    news3
    news2
    news1

    Cat4
    news1

    Il massimo che sono riuscito a ottenere invece è la suddivisione in categorie con solo l'ultimo record per ciascuna di esse:
    Cat1
    news4

    Cat2
    news2

    Cat3
    news3

    Cat4
    news1

    Con questa query:
    SELECT id,titolo,categoria FROM news GROUP BY categoria ORDER BY data DESC

    Ho provato a guardare molti altri tipi di query, anche più complesse, ma non sono sicuro di quale faccia più al caso mio....


  • User Newbie

    ciao, sicuramente una parte dei tuoi problemi origina dal fatto che (per come ce l'hai descritto) il tuo db non è in forma normale. Dovresti avere una tabella per le news (id, titolo, id_categoria, data) e una di categorie (id, nome_categoria) dopodiché puoi fare una select sulla tabella delle categorie e usare group_concat per ottenere una stringa che raggruppi le news per categoria, esattamente come nel tuo esempio

    guarda qui: dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat


  • User

    Ho letto il tuo problema molto velocemente su altri forum (inglesi) ed ho intravisto che qualcuno ha risposto modificando la query in questo modo:
    [PHP]SELECT id,titolo,categoria FROM news ORDER BY data DESC GROUP BY categoria[/PHP]
    detto francamente non ho avuto la possibilità di testare questa cosa. A quanto pare non sei l'unico che ha questo tipo di problema e poche sono le risposte risolutive a riguardo.

    Come risposta VELOCE e un bel po "ROZZA" potrei dirti di fare una serie di query in questo modo:
    [PHP]SELECT id,titolo,categoria FROM news WHERE categoria = 1 ORDER BY data [/PHP]
    e cosi via per le altre 4 categorie al limite usando un ciclo for/next per incrementare il numero della categoria, quindi..giusto per capirci..:

    [PHP]$num_cat = 1
    SELECT id,titolo,categoria FROM news WHERE categoria = $num_cat ORDER BY data[/PHP]

    Scusa per questa risposta veloce ma non sono con il mio pc, al limite te la faccio piu dettagliata se non hai capito cosa intendo dire.
    Facci sapere CIAOOO.


  • User Newbie

    io faccio spesso query come questa, utilizzando il group by come dicevo... non è nulla di complicato. Con il group by ottieni una stringa separata da un token che puoi poi esplodere comodamente in php