+ Rispondi alla Discussione
Risultati da 1 a 4 di 4

Raggruppamento di record in categorie con GROUP BY

Ultimo Messaggio di fabio.mosti il:
  1. #1
    User
    Data Registrazione
    Jul 2010
    Messaggi
    70

    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....

  2. #2
    User
    Data Registrazione
    Jun 2012
    Località
    Bologna
    Messaggi
    10
    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

  3. #3
    User
    Data Registrazione
    Oct 2010
    Messaggi
    71
    Ho letto il tuo problema molto velocemente su altri forum (inglesi) ed ho intravisto che qualcuno ha risposto modificando la query in questo modo:
    Codice PHP:
    SELECT id,titolo,categoria FROM news  ORDER BY data DESC GROUP BY categoria 
    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:
    Codice PHP:
    SELECT id,titolo,categoria FROM news  WHERE categoria 1 ORDER BY data 
    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..:

    Codice PHP:
    $num_cat 1
    SELECT id
    ,titolo,categoria FROM news  WHERE categoria $num_cat ORDER BY data 
    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.

  4. #4
    User
    Data Registrazione
    Jun 2012
    Località
    Bologna
    Messaggi
    10
    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

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.